Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自定义PHP扩展的交叉兼容性_Php_Php Extension - Fatal编程技术网

自定义PHP扩展的交叉兼容性

自定义PHP扩展的交叉兼容性,php,php-extension,Php,Php Extension,我正在构建我的第一个PHP扩展,将其用作路线图,并遇到了一些(对我来说)有趣的问题 服务器上安装的是PHP7.2,但当前的master版本是7.4。我将php src master复制到服务器上,并执行php ext_skel.php--ext test--dir的第一步,然后 # phpize # ./configure # make 然后我得到这个错误: /bin/bash /root/php-src-master/ext/test/libtool --mode=compile cc -

我正在构建我的第一个PHP扩展,将其用作路线图,并遇到了一些(对我来说)有趣的问题

服务器上安装的是PHP7.2,但当前的
master
版本是7.4。我将
php src master
复制到服务器上,并执行
php ext_skel.php--ext test--dir
的第一步,然后

# phpize
# ./configure
# make
然后我得到这个错误:

/bin/bash /root/php-src-master/ext/test/libtool --mode=compile cc  -I. -I/root/php-src-master/ext/test -DPHP_ATOM_INC -I/root/php-src-master/ext/test/include -I/root/php-src-master/ext/test/main -I/root/php-src-master/ext/test -I/usr/include/php/20170718 -I/usr/include/php/20170718/main -I/usr/include/php/20170718/TSRM -I/usr/include/php/20170718/Zend -I/usr/include/php/20170718/ext -I/usr/include/php/20170718/ext/date/lib  -DHAVE_CONFIG_H  -g -O2   -c /root/php-src-master/ext/test/test.c -o test.lo 
libtool: compile:  cc -I. -I/root/php-src-master/ext/test -DPHP_ATOM_INC -I/root/php-src-master/ext/test/include -I/root/php-src-master/ext/test/main -I/root/php-src-master/ext/test -I/usr/include/php/20170718 -I/usr/include/php/20170718/main -I/usr/include/php/20170718/TSRM -I/usr/include/php/20170718/Zend -I/usr/include/php/20170718/ext -I/usr/include/php/20170718/ext/date/lib -DHAVE_CONFIG_H -g -O2 -c /root/php-src-master/ext/test/test.c  -fPIC -DPIC -o .libs/test.o
In file included from /root/php-src-master/ext/test/test.c:10:0:

/root/php-src-master/ext/test/test_arginfo.h:8:2: warning: implicit declaration of function ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE [-Wimplicit-function-declaration]
ZEND_ARG_TYPE_INFO_WITH_DEFAULT_VALUE(0, str, IS_STRING, 0, "\"\"")
如果我下载7.2版本的src,那么一切都正常。我想我很惊讶,因为我在这一点上根本没有编辑任何代码,所以我认为这相当于一个
Hello World
系统,它似乎在版本之间具有最终的兼容性,因此不会抛出错误,除非我调用了安装版本中不存在的函数。如果这是真的,并且正在调用一个7.2中没有的“新”函数,那么一个基本框架将利用7.2中没有的函数来显示“Hello World”似乎很奇怪

如果我在7.2中创建和编译,我以后能在7.4中编译吗?如果我在7.4中编译,我能在7.2中使用它吗

我想要构建的扩展将有非常简单的工作,但是需要快速频繁地完成。比如格式化电话号码、过滤json、处理递归树关系等等


看到了这个兼容性问题,我很好奇这是否会限制我使用特定版本的PHP,即使我不想在代码中使用任何新函数,在未来几年,每次升级PHP时,我都必须重写它。

特定PHP版本分支的框架可能会使用该版本中引入的功能/内部API,如果您想构建与较低PHP版本兼容的扩展,您应该从该PHP版本的PHP扩展框架开始工作,不是从最近的函数声明开始的。

隐式函数声明意味着它在链接时找不到函数。您可能需要
-l
或者
-l
来告诉链接器在哪里可以找到它。