解决aarch64 Debian 编译安装PHP5.x 报错(原创)

2023-03-24 1126点热度 1人点赞 5条评论
环境

1、Oracle ARM Debian 11

2、宝塔面板7.9.8

起因:因为测试需要不得不使用PHP5.6,正好手上有一台机器,原来安装PHP7以上环境一切正常。

报错内容

原因:经过大量搜索,终于在官方找到解决办法。这个问题主要是ARM机器在编译时不能“取整”导致的,网上很多教程要不就是换PHP7以版本,要不是就是更换系统。这个是PHP的一个BUG,官方已经修复,不过只支持PHP7以上版本。

解决方法:

修改PHP安装包Zend/zend_multiply.h第65、66行左右(“+”为修改后内容),PHP5.x 版本通用。

修改完之后就可以正常编译了。

 

宝塔面板修改:

php包安装路径/www/server/php/56/src,已经解压出了来,直接修改保存就可以了。

因为宝塔编译安装要点时间,所以在一开始安装就修改,不要等到安装失败再修改。

其它面板或一键环境包自行修改。

原文:https://bugs.php.net/patch-display.php?bug_id=70015&patch=fix-asm-constraints-in-aarch64-multiply-macro&revision=latest

六度

这个人很懒,什么都没留下

文章评论

  • xyinfo

    测试修改 /www/server/php/56/src/Zend/zend_multiply.h 文件后安装仍然失败,报错仍然和之前一样。后面发现在宝塔后台点安装php5.6后不久,zend_multiply.h文件的内容会变为未修复错误之前的原始代码。

    /tmp/cczzFizq.s: Assembler messages:
    /tmp/cczzFizq.s:6684: Error: operand 2 must be an integer register -- mul x2,v0,v1'
    /tmp/cczzFizq.s:6685: Error: operand 2 must be an integer register --
    smulh x0,v0,v1'
    /tmp/cczzFizq.s:7403: Error: operand 2 must be an integer register -- mul x2,v9,v0'
    /tmp/cczzFizq.s:7404: Error: operand 2 must be an integer register --
    smulh x1,v9,v0'
    /tmp/cczzFizq.s:7553: Error: operand 2 must be an integer register -- mul x2,v0,v0'
    /tmp/cczzFizq.s:7554: Error: operand 2 must be an integer register --
    smulh x1,v0,v0'
    make: *** [Makefile:1989: Zend/zend_operators.lo] Error 1

    2023-08-07
    • 六度

      @xyinfo 我在文中的环境测试下一切正常

      2023-08-07
      • xyinfo

        @六度 我的主要问题是,按照大佬你的教程修改了/www/server/php/56/src/Zend/zend_multiply.h,然后安装php,安装完成报错,然后就发现/www/server/php/56/src/Zend/zend_multiply.h这个文件又被恢复到没修改的状态。估计没法安装就是因为文件总会被覆盖。我每次把这个文件权限改成只读都不行。大佬有没有什么解决办法吗?我的环境和你几乎一样:Oracle ARM Debian 11、宝塔7.9.5

        2023-08-07
        • 六度

          @xyinfo 我现在手上没有arm机器,暂时没办法重试,写文章时测试几遍都可以通过的。

          2023-08-16
  • 芋泥苑

    你写得非常清晰明了,让我很容易理解你的观点。

    2023-04-29