• 周年纪念勋章活动已圆满结束,如有已购买但仍未申请的用户,可以通过对应勋章的下载链接申请~

PHP 给pmmp编译php(仅支持x86_64与aarch64)

tzdt

【Lv:3】

正式会员
注册
2021/07/15
消息
21
金粒
11,838金粒
如题,本篇文章会教你如何编译适用于pmmp的php
看到标题后你可能会疑惑,为什么仅支持x86_64与aarch64?你别管,这两个架构就是用不了(编译好后跑PocketMine会报错),闲着没事的可以给arm和i386编译,跑不了不关我事

你需要:
可访问github
一个安装有GNU/Linux的机器或虚拟机
你问我编译适用于Windows平台的php?等我把Visual Studio安好后再出另一篇教程
(其实别人已经发了一篇教程了,但是看起来的确有些复杂......)

好了,废话不多说,不多说废话,直接开始教程
演示机器系统为Ubuntu 22.04 amd64,用户为root,安装软件包时报错请在前面加上sudo

非跨架构编译
Step 1:安装必需的工具
Bash:
apt install build-essential git autoconf automake m4 bison cmake pkg-config re2c libtool-bin -y

Step 2:下载编译脚本
Bash:
mkdir php
cd php
#如果github访问困难,可以在链接前面加上[URL]https://gh.tuanzi.eu.org/[/URL]
wget [URL]https://github.com/pmmp/PHP-Binaries/raw/php/8.1/compile.sh[/URL]

Step 3:开始编译
Bash:
#命令参数解释:
# -t指定系统类型,-j指定线程数 -P指定PocketMine的内核版本(只能4或5)
bash compile.sh -t linux64 -j4 -P5
这个时候,只需要经过漫长的等待就可以编译成功,php文件在你的编译目录下的bin/php7/bin/php

Q1:访问不了github怎么办?
Bash:
sed -i 's@https://github\.com@https://gh\.tuanzi\.eu\.org/https://github\.com@g' compile.sh
#如果无输出,则执行成功,千万不要重复执行,重复执行此命令会导致脚本不可用
如果脚本在运行在downloading...中退出了,可尝试多执行几次,如果在compiling...退出了,请查看install.log的内容进行判断错误原因


跨架构编译
有时,在aarch64架构的机器上编译会出现编译失败或过慢的情况,这时,就可以在电脑上编译给aarch64用的php二进制文件了

先执行Step 1步骤

然后执行:
Bash:
git clone [URL]https://github.com/pmmp/musl-cross-make[/URL]
cd musl-cross-make
cp config.mak.dist config.mak
#编辑config.mak,可使用你喜好的编辑器,我这里使用nano
nano config.mak
#找到# OUTPUT = /usr/local,把前面的"#"去掉
#保存并退出
#按下Ctrl + X,然后按下y,再按下回车即可保存并退出

#编译编译器
make && sudo make install

#验证编译器是否能用
aarch64-linux-musl-gcc --version
这时就开始编译了,等待的时间非常漫长,根据你的设备性能决定编译的时间,通常需要几小时

然后执行Step 2步骤

然后执行以下命令:
Bash:
bash compile.sh -t android-aarch64 -x -j4 -P5
#这次多了个-x,这是为了指定此次编译是跨架构编译
php文件在你的编译目录下的bin/php7/bin/php
如果访问不了github请看Q1

教程结束了,如果有问题可在帖子下询问(总共写了我1633个字)
严禁转载
 
unknown warning option '-Wshadow=local' [-Wunknown-warning-option] 1 warning generated. rm -f ./libiberty.a pic/./libiberty.a noasan/./libiberty.a ar rc ./libiberty.a \ ./regex.o ./cplus-dem.o ./cp-demangle.o ./md5.o ./sha1.o ./alloca.o ./argv.o ./choose-temp.o ./concat.o ./cp-demint.o ./crc32.o ./d-demangle.o ./dwarfnames.o ./dyn-string.o ./fdmatch.o ./fibheap.o ./filename_cmp.o ./floatformat.o ./fnmatch.o ./fopen_unlocked.o ./getopt.o ./getopt1.o ./getpwd.o ./getruntime.o ./hashtab.o ./hex.o ./lbasename.o ./lrealpath.o ./make-relative-prefix.o ./make-temp-file.o ./objalloc.o ./obstack.o ./partition.o ./pexecute.o ./physmem.o ./pex-common.o ./pex-one.o ./pex-unix.o ./vprintf-support.o ./rust-demangle.o ./safe-ctype.o ./simple-object.o ./simple-object-coff.o ./simple-object-elf.o ./simple-object-mach-o.o ./simple-object-xcoff.o ./sort.o ./spaces.o ./splay-tree.o ./stack-limit.o ./strerror.o ./strsignal.o ./timeval-utils.o ./unlink-if-ordinary.o ./xasprintf.o ./xatexit.o ./xexit.o ./xmalloc.o ./xmemdup.o ./xstrdup.o ./xstrerror.o ./xstrndup.o ./xvasprintf.o ./bcmp.o ./bcopy.o ./bzero.o ./index.o ./rindex.o ./strverscmp.o ./setproctitle.o ./strncmp.o /bin/sh: 1: ar: not found make[4]: *** [Makefile:250: libiberty.a] Error 127 make[4]: Leaving directory '/data/data/com.termux/files/home/php/musl-cross-make/build/local/aarch64-linux-musl/obj_binutils/libiberty' make[3]: *** [Makefile:8052: all-libiberty] Error 2 make[3]: Leaving directory '/data/data/com.termux/files/home/php/musl-cross-make/build/local/aarch64-linux-musl/obj_binutils' make[2]: *** [Makefile:852: all] Error 2 make[2]: Leaving directory '/data/data/com.termux/files/home/php/musl-cross-make/build/local/aarch64-linux-musl/obj_binutils' make[1]: *** [Makefile:215: obj_binutils/.lc_built] Error 2 make[1]: Leaving directory '/data/data/com.termux/files/home/php/musl-cross-make/build/local/aarch64-linux-musl' make: *** [Makefile:182: all] Error 2
怎么办
 
unknown warning option '-Wshadow=local' [-Wunknown-warning-option] 1 warning generated. rm -f ./libiberty.a pic/./libiberty.a noasan/./libiberty.a ar rc ./libiberty.a \ ./regex.o ./cplus-dem.o ./cp-demangle.o ./md5.o ./sha1.o ./alloca.o ./argv.o ./choose-temp.o ./concat.o ./cp-demint.o ./crc32.o ./d-demangle.o ./dwarfnames.o ./dyn-string.o ./fdmatch.o ./fibheap.o ./filename_cmp.o ./floatformat.o ./fnmatch.o ./fopen_unlocked.o ./getopt.o ./getopt1.o ./getpwd.o ./getruntime.o ./hashtab.o ./hex.o ./lbasename.o ./lrealpath.o ./make-relative-prefix.o ./make-temp-file.o ./objalloc.o ./obstack.o ./partition.o ./pexecute.o ./physmem.o ./pex-common.o ./pex-one.o ./pex-unix.o ./vprintf-support.o ./rust-demangle.o ./safe-ctype.o ./simple-object.o ./simple-object-coff.o ./simple-object-elf.o ./simple-object-mach-o.o ./simple-object-xcoff.o ./sort.o ./spaces.o ./splay-tree.o ./stack-limit.o ./strerror.o ./strsignal.o ./timeval-utils.o ./unlink-if-ordinary.o ./xasprintf.o ./xatexit.o ./xexit.o ./xmalloc.o ./xmemdup.o ./xstrdup.o ./xstrerror.o ./xstrndup.o ./xvasprintf.o ./bcmp.o ./bcopy.o ./bzero.o ./index.o ./rindex.o ./strverscmp.o ./setproctitle.o ./strncmp.o /bin/sh: 1: ar: not found make[4]: *** [Makefile:250: libiberty.a] Error 127 make[4]: Leaving directory '/data/data/com.termux/files/home/php/musl-cross-make/build/local/aarch64-linux-musl/obj_binutils/libiberty' make[3]: *** [Makefile:8052: all-libiberty] Error 2 make[3]: Leaving directory '/data/data/com.termux/files/home/php/musl-cross-make/build/local/aarch64-linux-musl/obj_binutils' make[2]: *** [Makefile:852: all] Error 2 make[2]: Leaving directory '/data/data/com.termux/files/home/php/musl-cross-make/build/local/aarch64-linux-musl/obj_binutils' make[1]: *** [Makefile:215: obj_binutils/.lc_built] Error 2 make[1]: Leaving directory '/data/data/com.termux/files/home/php/musl-cross-make/build/local/aarch64-linux-musl' make: *** [Makefile:182: all] Error 2
怎么办
缺个叫binutils的软件包
 
如果是用树莓派呢
树莓派好像是arm的32位cpu,并不能正常使用,但是你可以使用qemu-aarch64-static程序进行转译运行64位程序,虽然性能不是很行
 

在线会员

  • xiaobei
  • MrXiaoM
  • pjhuc
  • 毒蘑菇
  • Moz233
  • isuo
  • C ZZ
  • Xhl_laser
  • 小板栗
  • HiTech0926
  • ymz
  • 却冰瑶
  • 椰奶冻冻UwU
  • qwqw
  • 没钱的山海
  • alieleanor
  • Mutike
  • kygomc
  • NewmoonNeko
...和 1 更多。
后退
顶部 底部