1

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

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

方法 :

  • php 的编译版本,配置为:--enable-pcntl
  • DSM 工具链 4.1:http__sourceforge.net/projects/dsgpl/f ... z/download)
  • 带有 Debian 32b 的虚拟机:ftp__ftp.free.fr/mirrors/ftp.ubuntu.co ... d-i386.iso
  • Synology 3rd 方说明 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+,根据在线文章修改了引导程序并利用 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() 分配超出列表边界在.... test_microtime.php 在第 3 行

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:在我尝试时间函数之前,我认为一切都像魅力一样工作:)....

谢谢,约翰

4

1 回答 1

0

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

我已经成功使用了 QEMU 模拟器,带有 ARM/PowerPC 和 MIPS 目标。

您也可以参考我在另一个帖子中的回答。引用:

QEMU 将您的 PC 变成一个虚拟机管理程序,即像 VirtualBox 一样工作。但是 QEMU 也可以模拟不同于主机 PC 的 CPU。

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

于 2018-11-22T12:16:23.680 回答