我正在尝试为arm交叉编译php,并取得了良好的进展,但我完全被它想运行php本身的地方卡住了(不知道为什么(。因为它是arm二进制文件,而不是intel(我的构建平台(,所以它不会运行:
/bin/sh: /path-to-build/sapi/cli/php: cannot execute binary file
我该怎么解决这个问题?配置脚本理解我在交叉编译,但没有对此做任何操作(从配置日志(:
checking whether the C compiler (/path-to-compiler/arm-none-linux-gnueabi-gcc) is a cross-compiler... yes
我正在用配置命令行编译php-5.3.6
:
export CC=/path-to-cc/arm-none-linux-gnueabi-gcc
../configure --prefix=/prefix-path/ --host=arm-none-linux-gnueabi
--disable-libxml --disable-dom --disable-openssl
--without-iconv --without-openssl --disable-simplexml
--disable-xml --disable-xmlreader --disable-xmlwriter
--without-pear --without-sqlite --without-sqlite3
--disable-pdo --without-pdo-sqlite
我能够通过禁用phar
自行解决此问题。我希望禁用这么多模块不会破坏内部的一些东西。
在不进行交叉编译的情况下构建,然后在交叉编译时,通过在运行make时重写命令行上makefile中的变量来指向php的主机版本。
类似于:
make PHP_VAR_NAME=path to php built for host
我用以下参数为arm编译了PHP:
export PATH="$PATH:/toolchains/gnu_cortex-a9_tools/usr/bin"
export ARCH=arm
配置脚本:
./configure --build=x86_64-unknown-linux-gnu --host=arm-linux-uclibcgnueabi --prefix=/usr/arm CC="arm-linux-uclibcgnueabi-gcc --sysroot=/toolchains/gnu_cortex-a9_tools/" --disable-libxml --disable-dom --without-iconv --without-openssl --disable-simplexml --disable-xml --disable-xmlreader --disable-xmlwriter --without-pear --without-sqlite3 --disable-pdo --without-pdo-sqlite --disable-phar
然后是
make
在交叉编译PHP 5.6.0时,我在运行configure
脚本后编辑了Makefile
,从而解决了类似的问题。只需替换所有出现的
$(top_builddir(/$(SAPI_CLI_PATH(
带有
/usr/bin/php
其中/usr/bin/php
是您的主机php-cli。确保它已安装,例如,用于Debian/Ubuuntu的sudo apt-get install php5-cli
。
这样做之后,phar扩展构建了良好的