解决aarch64 Debian 编译安装PHP5.x 报错
发布时间:2023-8-23 18:23:36    来源: 纵横数据
										环境
1、Oracle ARM Debian 11
2、宝塔面板7.9.8
起因:因为测试需要不得不使用PHP5.6,正好手上有一台机器,原来安装PHP7以上环境一切正常。
报错内容
| 1 2 3 4 5 | | {standard input}: Assembler messages: | {standard input}:2977: Error: operand 2 should be an integer register -- `mul x1,[x29,200],[x29,192]' | {standard input}:2978: Error: operand 2 should be an integer register -- `smulh x0,[x29,200],[x29,192]' | {standard input}:3042: Error: operand 2 should be an integer register -- `mul x1,[x29,192],[x29,192]' | {standard input}:3043: Error: operand 2 should be an integer register -- `smulh x0,[x29,192],[x29,192]' | 
原因:经过大量搜索,终于在官方找到解决办法。这个问题主要是ARM机器在编译时不能“取整”导致的,网上很多教程要不就是换PHP7以版本,要不是就是更换系统。这个是PHP的一个BUG,官方已经修复,不过只支持PHP7以上版本。
解决方法:
修改PHP安装包Zend/zend_multiply.h第65、66行左右(“+”为修改后内容),PHP5.x 版本通用。
| 1 2 3 4 5 6 7 8 9 10 |  	__asm__("mul %0, %2, %3\n"										\  		"smulh %1, %2, %3\n"										\  		"sub %1, %1, %0, asr #63\n"									\ -			: "=X"(__tmpvar), "=X"(usedval)							\ -			: "X"(a), "X"(b));										\ +			: "=&r"(__tmpvar), "=&r"(usedval)						\ +			: "r"(a), "r"(b));										\  	if (usedval) (dval) = (double) (a) * (double) (b);				\  	else (lval) = __tmpvar;											\  } while (0) | 
修改完之后就可以正常编译了。
宝塔面板修改:
php包安装路径/www/server/php/56/src,已经解压出了来,直接修改保存就可以了。
因为宝塔编译安装要点时间,所以在一开始安装就修改,不要等到安装失败再修改。
其它面板或一键环境包自行修改。
纵横数据面向全国提供自建BGP云计算中心,跨境数据中心运营,AI-GPU大数据中心运营,IOT物联网机房运营,5G移动互联机房建设,海外设备集采上架,边缘云PCDN节点汇聚,私有云建设,动态静态IP租用,机柜大带宽,高防CDN解决方案,物联系统集成,软件开发外包等业务。
官网:www.155cloud.com  联系方式:QQ:576791973 1590875265  手机:19906048602 
										
											本文来源:
											
										
										
									
												https://155cloud.com/article/12061.html
												
													[复制链接]
												
												链接已复制
											
										
 
                 
                     
                