如何在交叉编译的PHP上使用动态加载的扩展?

时间:2014-03-10 19:30:41

标签: php arm

我已经为ARM平台编译了PHP。我现在正试图通过PHP.ini(extension = ...)动态加载我为ARM编译的扩展。但是,未加载扩展名且未报告错误。

我检查过的事情:

  • PHP正在读取正确的PHP.ini文件
  • 我可以看到使用-i选项
  • 对PHP.ini文件所做的更改
  • -d“extension = ...”,没有加载扩展,没有错误。
  • enable_dl = 1,命令行中的dl(...)不起作用(“命令行代码中不支持动态模块”)

使用以下选项编译PHP:

./configure --host=arm-linux --target=arm -prefix=/php-5.5.8/_install --with-sqlite3 --without-pdo-sqlite --without-pear --disable-mbregex --enable-sockets --enable-fpm --enable-json --enable-session --enable-filter --disable-opcache --disable-libxml --disable-simplexml --without-zlib --disable-all

这是否与--disable-all选项有关?我是否需要做一些事情来启用动态扩展(即使使用enable_dl,我也无法从命令行运行dl(...))?我是否必须将我的扩展名静态编译为PHP?

编辑:静态链接扩展工作正常。这不是扩展的问题。但是能够动态加载扩展会更加理想。

2 个答案:

答案 0 :(得分:1)

当您尝试交叉编译PHP时,配置脚本将禁用扩展的支持接缝。

您可以查看交叉编译的CLI

:~>php -i |grep Dynamic
Dynamic Library support not available<br />.

如果您想使用扩展程序,您有两种方法:   - 破解配置脚本以手动启用扩展程序的支持,绕过检查   - 为目标系统使用本机编译器

我使用了第二个,使用本机编译的PHP 5.3.28成功加载Arm上的扩展

原生编译CLI

:~>php -i |grep Dynamic
Dynamic Library Support => enabled

答案 1 :(得分:0)

针对freetz php包交叉编译为mips时遇到相同的问题,并且 终于找到了busybox Patch

他们的解决方案是

  1. 修补/ext/opcache/config.m4自动配置宏
  2. 在其makefile中添加一些与shm相关的编译器标志

此外,我还开始了第3968行 php-5.6.40 / aclocal.m4:

  • Date Year 2000 2000 1998年4月第11次印刷 1998 01 November, 2005 2005 出版日期:2008-06 2008 (June 22, 2000) 2000
  • 还使用-all-static静态编译了php-cgi

...解决了这个问题-经过长时间的搜索。 希望可以通过在这里发布来帮助其他人。 欢呼,Thorsten