用于QoriQ P1022的CROSS COMPILE PHP 5.5.1(DS213 +) - 致命错误:Balloc()分配超出

时间:2014-04-23 22:49:04

标签: php cross-compiling powerpc synology

我为DS2013 +(QoriQ P1022)交叉编译php而挣扎了几天

目标:能够利用php利用pcntl_fork()

表示:

  • 配置了:--enable-pcntl
  • 的php的编译版本
  • DSM工具链4.1:http__sourceforge.net/projects/dsgpl/f ... z / download)
  • 使用Debian 32b的VM:ftp__ftp.free.fr/mirrors/ftp.ubuntu.co ... d-i386.iso
  • Synology第三方指示PDF:http__usdl.synology.com/download/ds/us ... _Guide.pdf
  • php-5.5.11:http__www.php.net/get/php-5.5.11.tar.gz/from/a/mirror
  • php-5.6.0beta1:http__downloads.php.net/tyrael/php-5.6.0beta1.tar.gz
  • 我的NAS:213+,在线文章修改了bootstrap并利用ipkg存储库:http__packages.quadrat4.de/ 所以上面所有我打算在Debian上交叉编译php5.5.1(或5.6beta0):

问题:每次我都会遇到此错误: 致命错误:Balloc()分配超出列表边界....

来自debian:

我的根工作文件夹:/ home / enola / NAS_Compiler /

PhP在这里解压缩:     /home/enola/NAS_Compiler/PhP/php-5.5.11     /home/enola/NAS_Compiler/PhP/php-5.6.0beta1

工具链:     tar -xvzf gcc4374_eglibc2874_qoriq-GPL.tgz     mv powerpc-none-linux-gnuspe / usr / local /

export CC=/usr/local/powerpc-none-linux-gnuspe/bin/powerpc-none-linux-gnuspe-gcc
export CXX=$CC
(also tried with CXX=/usr/local/powerpc-none-linux-gnuspe/bin/powerpc-none-linux=gnuspe-g++)
(and without it)
export LD=/usr/local/powerpc-none-linux-gnuspe/bin/powerpc-none-linux-gnuspe-ld
export AR=/usr/local/powerpc-none-linux-gnuspe/bin/powerpc-none-linux-gnuspe-ar
export RANLIB=/usr/local/powerpc-none-linux-gnuspe/bin/powerpc-none-linux-gnuspe-ranlib
export CFLAGS='-I/usr/local/powerpc-none-linux-gnuspe/include -mcpu=8548 -mhard-float -mfloat-gprs=double'
(also tried with CFLAGS='-I/usr/local/powerpc-none-linux-gnuspe/include')
export LDFLAGS="-L/usr/local/powerpc-none-linux-gnuspe/lib"

我在下面尝试了多个.configure:

./configure --host=powerpc-unknow-linux --target=powerpc-unknow-linux --build=i686-pc-linux --prefix=/home/enola/NAS_Compiler/usr/local/ --disable-all --with-layout=GNU --enable-debug

尝试没有--with-layout = GNU, - enable-debug) 也试过--enable-inline-optimization

make CC="${CC}" AR="${AR} r"

编译完成后,我将sapi / cli / php复制到NAS

来自DSM(NAS):

PHP 5.5.11 然后执行它:./ php -c ./php.ini-simple -f test_microtime.php 结果: 致命错误:Balloc()分配超过第3行的..... test_microtime.php中的列表边界

PHP 5.6.0beta0 然后执行它:./ php -c ./php.ini-simple -f te 相同的结果...: 致命错误:Balloc()分配超出了第3行的.... test_microtime.php中的列表边界

test_microtime.php:

<?Php
echo microtime(true);
?>

上面命令中的phpscript,strace,php.ini-simple和php二进制文件.. 都在这里: http://www.mobilutils.com/20140423_sentToForum.zip

SHA1:(20140423_sentToForum.zip)= 5a04cb7015c28d798ac2446e14fd9c114f47a660

通过一些研究我发现这个和其他人没有解决如何解决问题的线索:(:https://bugs.php.net/bug.php?id=47980

所以我写这篇文章以防你们中的一个人知道我做错了什么...... 欢迎任何可能有助于解决此问题的建议,

PS:我认为一切都像魅力一样,直到我尝试时间功能:).... ....

感谢, 约翰

1 个答案:

答案 0 :(得分:0)

通常,我更喜欢在模拟目标机器硬件的VM上运行Linux。 您还可以更好地测试二进制文件/东西。

我已经成功地使用了带有ARM / PowerPC和MIPS目标的QEMU仿真器。

您还可以在另一个线程中引用我的answer。引用:

  

QEMU使您的PC进入虚拟机监控程序,即像VirtualBox一样工作。但   QEMU还可以仿真与主机PC不同的CPU。

     

您可以在标准(廉价)x86 PC上安装和运行PowerPC Linux VM   并直接在该VM中编译二进制文件。 CPU仿真有点慢,但是可以。