centos上PHP8安装fileinfo拓展失败

前段时间通过编译安装PHP8的时候因为内存的原因加了--disable-fileinfo禁用了fileinfo拓展 然而最近使用PHP8安装Laravel8的时候却因为部分包依赖fileinfo而无法安装。

想着我也不是头一次给编译后的PHP安装拓展了,装个fileinfo的拓展又有多难呢。 然而现实还是给了我一记响亮亮的耳光,make的时候不仅报错,还找不到解决办法。

网上找了半天也是找了个寂寞,就一篇 相关的文章 在最后告诉我 如无意外,fileinfo是安装不上的。 果然我没有遇到那个"意外"。 他得到的错误是这样的:

/root/oneinstack/src/php-8.0.0/ext/fileinfo/libmagic/funcs.c: In function ‘file_checkfmt’:
/root/oneinstack/src/php-8.0.0/ext/fileinfo/libmagic/funcs.c:97:2: error: ‘for’ loop initial declarations are only allowed in C99 mode
for (const char *p = fmt; *p; p++) {
^
/root/oneinstack/src/php-8.0.0/ext/fileinfo/libmagic/funcs.c:97:2: note: use option -std=c99 or -std=gnu99 to compile your code
make: *** [libmagic/funcs.lo] Error 1

而我得到的错误是中文版本:

/usr/local/src/php-8.0.0/ext/fileinfo/libmagic/funcs.c: 在函数‘file_checkfmt’中:
/usr/local/src/php-8.0.0/ext/fileinfo/libmagic/funcs.c:97:2: 错误:只允许在 C99 模式下使用‘for’循环初始化声明
for (const char *p = fmt; *p; p++) {
^
/usr/local/src/php-8.0.0/ext/fileinfo/libmagic/funcs.c:97:2: 附注:使用 -std=c99 或 -std=gnu99 来编译您的代码
make: *** [libmagic/funcs.lo] 错误 1

既然网上已经找不到解决办法了,但问题还要解决呀,就详细看了这个错误信息。 这里的附注让使用 -std=c99 或 -std=gnu99 来编译代码,看的我也是一脸懵,这我要加在哪里呀? 于是我就加在了make后面

make -std=c99

然后我得到了更多错误...

这个时候去查了下c99,了解到的这是一个cc选项。 我们知道在使用phpize的时候是根据系统环境生成configure文件 而在执行configure会生成Makefile文件(我猜的) make命令依赖Makefile进行构建,于是去查了下Makefile文件, 找到了下面的关键信息

20  libdir = ${exec_prefix}/lib
21  prefix = /usr/local/php8
22  phplibdir = /usr/local/src/php-8.0.0/ext/fileinfo/modules
23  phpincludedir = /usr/local/php8/include/php
24  CC = cc
25  CFLAGS = -g -O2
26  CFLAGS_CLEAN = $(CFLAGS)
27  CPP = cc -E
28  CPPFLAGS = -DHAVE_CONFIG_H
29  CXX =
30  CXXFLAGS =

于是尝试在第25行(不同环境的行数可能不一样,注意区分)上添加-std=c99,也就是

20  libdir = ${exec_prefix}/lib
21  prefix = /usr/local/php8
22  phplibdir = /usr/local/src/php-8.0.0/ext/fileinfo/modules
23  phpincludedir = /usr/local/php8/include/php
24  CC = cc
25  CFLAGS = -std=c99 -g -O2
26  CFLAGS_CLEAN = $(CFLAGS)
27  CPP = cc -E
28  CPPFLAGS = -DHAVE_CONFIG_H
29  CXX =
30  CXXFLAGS =

重新make,这个时候之前的报错不见了,又有了新的报错(这不重要),然后又改了点别的(这也不重要) 发现还是那个错误,想着是不是有缓存呀,恍惚记得有个命令是这样的: make clean

然后重新make,这时"意外"居然发生了,第二个错误不见了(所以说它不重要)直接编译通过。然后再执行make install安装成功 后续使用也没有遇到其他问题。

叨叨了这么多,总结一下就是遇到这个问题,这样解决

先执行 make clean 清除缓存

然后修改 Makefile 中的 CFLAGS 添加 -std=c99

然后重新make && make install 就可以了

球场恶霸

我的PHP8.1.3的 报错什么括号问题 结果注释掉提示的代码居然就安装成功了 不知所以然

这个是PHP错误 他会显示你在代码的那个地方调用了这段代码 我当时用用的laravel框架 显示是在框架的某一个地方调用了PHP的一个函数报错 然后我把框架报错的位置那个调用函数的方法给注释了就好了

邱海誉

你好,我也出现括号的错误,你是注释掉了哪些代码?去掉-02即可

/tmp/php-8.1.10/ext/fileinfo/libmagic/softmagic.c:507:7: error: expected identifier or ‘(’ before ‘__extension__’

char *strndup(const char *, size_t);

^

/tmp/php-8.1.10/ext/fileinfo/libmagic/softmagic.c:510:1: error: expected identifier or ‘(’ before ‘__extension__’

strndup(const char *str, size_t n)

注意:上边执行并没有好,正确如下

先执行 make clean 清除缓存

/usr/local/php8/bin/phpize

./configure --with-php-config=/usr/local/php8/bin/php-config

然后修改 Makefile 中的 CFLAGS 添加 CFLAGS = -std=c99 -g ,去掉-02

然后重新make && make install 就可以了

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lxw1844912514

你的打赏就是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值