文档章节

64位Ubuntu 14.04上使用musleabi最小化交叉编译Android版PHP7

eechen
 eechen
发布于 2016/05/22 15:26
字数 328
阅读 1384
收藏 10
点赞 3
评论 2

musl-cross-compilers(25MB)
https://bitbucket.org/GregorR/musl-cross/downloads

下载: php-7.0.6-arm-linux.xz(1.1MB)

CC=arm-linux-musleabi-gcc \
CXX=arm-linux-musleabi-g++ \
AR=arm-linux-musleabi-ar \
LD=arm-linux-musleabi-ld \
RANLIB=arm-linux-musleabi-ranlib \
STRIP=arm-linux-musleabi-strip \
CFLAGS="-Os" \
CXXFLAGS="-Os" \
./configure \
--host=arm-linux-musleabi \
--prefix=/opt/phpdroid/php \
--disable-all \
--enable-json \
--enable-pdo \
--with-sqlite3 \
--with-pdo-sqlite

PHP源代码自带PCRE库,编译时不依赖外部PCRE库,所以不需要额外编译PCRE库和配置CPPFLAGS和LDFLAGS参数:
CPPFLAGS="-I/png/dev/android/compiled/usr/include -I/png/dev/android/compiled/usr/usr/include" \
LDFLAGS="-static -L/png/dev/android/compiled/usr/lib -L/png/dev/android/compiled/usr/usr/lib" \

sed -i "s{/bin/sh{/system/bin/sh{" ext/standard/proc_open.c
sed -i "s{-export-dynamic{-all-static{" Makefile

缺 sed -i "s{-export-dynamic{-all-static{" Makefile 编译后:
./php -v 返回 -bash: ./php: No such file or directory
file ./php 返回 php: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), stripped
正常应该返回 php: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), statically linked, stripped

time nice -20 make -j2
make install

arm-linux-musleabi-strip /opt/phpdroid/php/bin/php
xz -z -k -9 /opt/phpdroid/php/bin/php
strip后不到4MB,xz压缩后约1MB.
比现在php.xz的3.7MB小了2.7MB, PHPDroid APK包能从5.7MB缩小到3MB.

./php -m
[PHP Modules]
Core
date
json
pcre
PDO
pdo_sqlite
Reflection
SPL
sqlite3
standard

./php -r 'print_r(get_defined_functions());' > func.txt
./php -r 'print_r(get_declared_classes());' > class.txt
可见包含了下面常用到的一些功能:
pdo_sqlite
json_encode/json_decode
file_get_contents/file_put_contents
注意:没有OpenSSL支持,file_put_contents是不支持HTTPS协议的.
./php -r "file_put_contents('logo.gif',file_get_contents('https://www.baidu.com/img/bdlogo.gif'));"

© 著作权归作者所有

共有 人打赏支持
eechen

eechen

粉丝 962
博文 107
码字总数 55962
作品 1
深圳
加载中

评论(2)

在 Ubuntu 和 Linux Mint 中轻松安装 Android Studio

Android Studio 是谷歌自己的 Android 开发 IDE,是带 ADT 插件的 Eclipse 的不错替代品。Android Studio 可以通过源代码安装,但在这篇文章中,我们将看到如何在 Ubuntu 18.04、16.04 和相应...

作者: Abhishek Prakash ⋅ 05/10 ⋅ 0

使用 Ubuntu 编译哔哩哔哩开源播放器最新 ijkplayer 0.8.8 源码

0x0000 安装 Ubuntu 我用的是 Oracle VM VirtualBox 虚拟机来安装 Ubuntu 64位,不会对已安装的系统造成什么影响。在新建的虚拟机时配置内存要选用大一点的,第一次我安装全是默认项,卡的要...

克里迪亚 ⋅ 05/23 ⋅ 0

【Android 开发入门】Android Studio 下载及安装

android 开发工具主流的还是Android Studio,当然也有很多人喜欢用Eclipse,也有人喜欢用IntelliJ IDEA ;还有Xamarin这种只需要编写一次代码,可以编译多种平台可运行的强大工具。但是它又真...

微wx笑 ⋅ 2016/09/11 ⋅ 0

PHP开发Linux桌面应用和Android应用思路

PHP7中用opcache.file_cache导出脚本opcode实现源代码保护 http://my.oschina.net/eechen/blog/539995 下载PHPDroid: 基于WebView和PHP内置HTTP服务器开发Android应用 http://my.oschina.ne......

eechen ⋅ 2015/09/05 ⋅ 14

Android高级之Dalvik初识

本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 研究安卓已多年,一直在应用层做开发,Framework层只是看过,也就是大家常说的"底层",而高级一点的功能如热加载、处理器...

liuzxgeek ⋅ 2016/06/07 ⋅ 0

Ubuntu 手机和平板机将支持 Android 应用

Ubuntu创始人Mark Shuttleworth日前在接受媒体采访时回答了一个大家关心的问题,那就是,Ubuntu手机版和平板机版本都将能够运行Android应用程序,不过第一代版本似乎无法实现。 Shuttleworth...

oschina ⋅ 2013/11/20 ⋅ 27

关于《30自制操作系统》第四章条纹图案的另一种实现

bootasm.asm使用了nasm格式代码,作用是切换到vga显示模式,开启A20地址线,设置GDT,进入保护模式,跳入32位汇编代码段,调用C语言编写的函数。 代码如下: extern bootmain [bits 16]globa...

Pagination ⋅ 2014/06/09 ⋅ 2

ubuntu环境开发android时候无法找到aapt

环境:ubuntu kylin 14.04系统 android使用adt-linux64位 出现错误的内容: /usr/adt-bundle-linux-x8664-20140321/sdk/build-tools/android-4.4.2/aapt: error while loading shared librar......

指尖残雪 ⋅ 2016/05/22 ⋅ 0

鸟人的Android揭秘(3)——Android 编译环境搭建

一、主机环境要求 要顺利编译 Android 源代码,硬件环境和操作系统都必须满足一定的条件。官方推荐的硬件环境配置是: 编译 Gingerbread(2.3.x)及后续版本必须使用64位系统 需至少留出100...

鸟人部落 ⋅ 2016/12/14 ⋅ 0

Canonical 发布 Ubuntu 开发者工具中心

Canonical 发布了 Ubuntu 开发者工具中心,便于在 Ubuntu 安装 Android Studio 和 Android SDK 。 Canonical 想要让开发者在 Ubuntu 创建其他平台的应用有宾至如归的感觉。Didier Roche,Can...

oschina ⋅ 2014/09/03 ⋅ 17

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring Cloud构建微服务架构—创建“服务注册中心”

创建一个基础的Spring Boot工程,命名为eureka-server,并在pom.xml中引入需要的依赖内容: <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-par......

itcloud ⋅ 15分钟前 ⋅ 0

拖动

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>event</title> <style> #box { width: 100px; height: 100px; background-color: aquamarine; position: absolute; } </style......

fyliujj ⋅ 18分钟前 ⋅ 0

es6 polyfill array

polyfill之javascript函数的兼容写法——Array篇 1. Array.isArray(obj) if (!Array.isArray) { Array.isArray = function(arg) { return Object.prototype.toString.call(arg) === '[objec......

球球 ⋅ 20分钟前 ⋅ 0

kibana启动异常

检查一下:kibana.yml 每一对key:value中,冒号之后应有空格。

增删改查1 ⋅ 22分钟前 ⋅ 0

js修改img的src属性刷新图片时的图片缓存问题

问题:上传一张图片,通过js更新src属性刷新图片使其即时显示时, 当img的src当前的url与上次地址无变化时(只更改图片,名称不变,不同图片名称相同)图片不变化(仍显示原来的图片) 但通过...

HaierBrother ⋅ 22分钟前 ⋅ 0

Mysql

1.Jdbc Url 设置allowMultiQueries为true和false mysql的批量更新是要我们主动去设置的, 就是在数据库的连接url上设置一下,加上* &allowMultiQueries=true *即可。 参数名称 参数说明 缺省...

瑟青豆 ⋅ 25分钟前 ⋅ 0

mysql导出导入表结构与数据

当我们需要进行数据迁移时,mysql自带的mysqldump会是最好的方式。 1.导出某张表的结构和数据 首先,我们应当使用服务器,打开终端,连接到所需要导出的表所在的服务器上。执行命令: mysqld...

hengbao5 ⋅ 25分钟前 ⋅ 0

世界杯也走向“比拼”大数据的时代

《日本经济新闻》6月19日报道称,俄罗斯足球世界杯已于6月14日揭开战幕。作为第21次举办的足球世界杯,如何活用大数据有可能成为决定各支球队胜负的重要因素。从对阵球队的分析到战术建议,还...

加米谷大数据 ⋅ 26分钟前 ⋅ 0

金额转为千分制,金额转中文大写

金额转关为大写 /** 数字金额大写转换(可以处理整数,小数,负数) */ function digitUppercase(n){ if(!n) reutrn "" let fraction = ['角', '分']; let digit = [...

YXMBetter ⋅ 28分钟前 ⋅ 0

开发利器JRebel部署SpringBoot项目

不要以为年纪轻轻就跌倒了人生谷底,未来还有更大的下降空间等着你。 idea下载和安装JRebel 激活JRebel 访问https://my.jrebel.com/ 使用facebook或twitter登录 勾选 Build project automati...

郑龙飞 ⋅ 34分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部