乐趣区

关于php8: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 就能够了

退出移动版