自定义PHP扩展的交叉兼容性
我正在构建我的第一个PHP扩展,将其用作路线图,并遇到了一些(对我来说)有趣的问题 服务器上安装的是PHP7.2,但当前的自定义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 -
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
来告诉链接器在哪里可以找到它。