最新消息:觉得本站不错的话 记得收藏哦 博客内某些功能仅供测试 讨论群:135931704 快养不起小站了 各位有闲钱就打赏下把 My Email weicots#gmail.com Please replace # with @

使用GCC 编译PHP 7.2 扩展遇到的一些问题

服务端开发 ajiang-tuzi 62浏览

1编译时报
unterminated argument list invoking macro “ZVAL_STRING”
error: missing terminating ” character
error: expected declaration or statement at end of input 错误
然后后面打印一堆内容,这个问题一般是头文件里面写函数声明的时候没有加分号;
或者.h中其他地方没有加分号; 然后我检查了半天 发现 竟然是 sprintf 中的字符串换行引起的问题
一个外国佬的回答

You have to:
to escape " char because of it is a special char used to define a C-String literal.
For multi line strings you must define each line as a single C-String using "" for each one
So, the resulting code is

  char * string = "{"
                  "\"sender\" : \"joys of programming\","
                  "\"receiver\": [ \"123\","
                                  "\"345\","
                                  "\"654\","
                                  "\"432\""
                                "]"
                 "}";


2.编译时报 __builtin_saddl_overflow’ was not declared in this scope 错误
这是一个已知的问题。问题是 CentOS 上的默认 gcc 缺少必需的定义,即使在升级 gcc 之后,PECL 也会找到旧的编译器。
要安装驱动程序,必须首先通过安装 devtoolset 集合来升级 gcc, GCC >= 5.0 如下所示:

sudo yum install -y yum-utils  centos-release-scl
sudo yum -y --enablerepo=centos-sclo-rh-testing install devtoolset-7-gcc
echo "source /opt/rh/devtoolset-7/enable" | sudo  tee -a /etc/profile
source /opt/rh/devtoolset-7/enable
gcc --version

备注
1.扩展加入php.ini 配置文件后提示

PHP Warning:  Module 'json' already loaded in Unknown on line 0

从英文可以看出PHP的扩展json已经加载了,所以就查看php.ini,搜索json.so发配置文件有写 然后搜索/etc/php.d 发现也有,删除php.ini中的加载语句,然后无间断服务加载php-fpm就解决了该问题
注意php 扩展有加载顺序要求
建议使用一个单独配置文件新增扩展; 以加载 wt.so 为例
在/etc/php.d 中新建配置文件 40-wt.ini 前面的数字代表加载顺序 越小越靠前

; Enable weicot tools extension module
extension=wt.so

2.undefined symbol: php_json_decode_ex 问题
查看 在/etc/php.d 中新建的配置文件 40-wt.ini 前面的数字是否小于 json 扩展配置文件的数字是的话把你当前的扩展的配置文件数字改大一点 使其晚于json 扩展配置文件加载

Linux 查看二进制文件内容
在Linux当中,查看二进制文件内容可以用hexdump工具,语法如下:

 hexdump [选项] [文件]...
    -n length 只格式化输入文件的前length个字节。
    -C 输出规范的十六进制和ASCII码。 
    -c 单字节字符显示。 
    -d 双字节十进制显示。
    -o 双字节八进制显示。 
    -x 双字节十六进制显示。
    -s 从偏移量开始输出。 
    -e 指定格式字符串,格式字符串包含在一对单引号中,格式字符串形如:'a/b "format1" "format2"'。

转载请注明:(●--●) Hello.My Weicot » 使用GCC 编译PHP 7.2 扩展遇到的一些问题