起因
这阵子换了新电脑,重新安装了系统,重新部署环境,装了宝塔面板,在装PHP8.1的时候,发现pathinfo怎么都装不上,一闪而过
没关系,咱是老PHPER了,直接自己编译,结果出现下面的错误
1 | /www/server/php/81/ext/fileinfo/libmagic/funcs.c: In function ‘file_checkfmt’: |
傻眼了,还没遇到过呢,果断百度之,啥都没有,得了,上谷歌搜,竟然也没有…
查找篇
但问题还要解决呀,就详细看了这个错误信息。
这里的附注让使用 -std=c99 或 -std=gnu99 来编译代码,看的我也是一脸懵,这我要加在哪里呀? 于是我就加在了make后面
1 | make -std=c99 |
然后我得到了更多错误…
思考篇
这个时候去查了下c99,了解到的这是一个cc选项。
我们知道在使用phpize的时候是根据系统环境生成configure文件
而在执行configure会生成Makefile文件, make命令依赖Makefile进行构建,于是去查了下Makefile文件, 找到了下面的关键信息
1 | 25 CFLAGS = -g -O2 |
于是尝试在第25行上添加-std=c99,也就是
1 | 25 CFLAGS = -std=c99 -g -O2 |
然后继续
1 | make clean && make && make install |
正当我觉得一切OK的时候,突然发现,又有了新的报错….
1 | /tmp/php-8.1.13/ext/fileinfo/libmagic/softmagic.c:507:7: error: expected identifier or ‘(’ before ‘__extension__’ |
解决篇
这次百度一下,百度到了…解决方式,再把Makefile的第25行的CFLAGS的-02删除掉,如下:
1 | 24 CC = cc |
然后重新 make
1 | make clean && make && make install |
一切正常….