PHP7扩展开发之引⼊外部so库遇到的问题
1. 问题由来?
参考龙哥的⽂章开发⼀个使⽤外部库的扩展,(这⾥⾮常感谢龙哥)遇到了如下问题:
1. 开发扩展⽂章地址:
1. 报错信息:php7: symbol lookup error: /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/uselib.so: undefined symbol: show_site
2. 调试过程
第⼀次分析
1.
2. 因为编译成功没有错误,所以先查看编译后的uselib.so扩展中查看符号show_site的类型
-
可以看到show_site的类型为U
U的解释php8兼容php7吗
该符号在当前⽂件中是未定义的,即该符号的定义在别的⽂件中。 例如,当前⽂件调⽤另⼀个⽂件中定义的函数,在这个被调⽤的函数在当前就是未定义的;但是在定义它的⽂件中类型是 T 。但是对于全局变量来说,在定义它的⽂件中,其符号类型为 C ,在使⽤它的⽂件中,其类型为 U 。
结果合理,没有啥问题
第⼆次分析
1. 看编译过程是否加⼊了hello.so的lib库
-我想看到的是这样的配置 -lhello , 结果没有
2. 看资料⽂档发现也是使⽤ PHP_ADD_LIBRARY_WITH_PATH($LIBNAME, $XXX_DIR/$PHP_LIBDIR,XXX_SHARED_LIBADD)
PHP_SUBST(SAY_SHARED_LIBADD) 添加链接库, 这⾥没问题
3. 看⽣成的Makefile 中是否有⽣成引⼊外部扩展的配置信息
-可以看到是有的,但是只有声明没有使⽤, 查资料没发现如何设置某个参数来添加该链接库信息到编译参数中, 如果您知道,还望不吝赐教
4. ⼿动解决外部依赖
配置参数没到,只好试试⼿动在编译的时候添加链接库信息,修改Makefile ⽂件,在最后⼀⾏./uselib.la
的末尾添加$(SAY_SHARED_LIBADD),注意前⾯有个空格
-
3. 解决问题从新编译
1. 报错
sudo make clean
sudo make
sudo make install
不能发现hello链接库,于是查看⽬录/usr/local/lib/下⾯的确有hello.so⽂件,为啥提⽰不到呢,其实这⾥只要将hello.so修改为libhello.so即可,然后在次执⾏上⾯的编译过程,搞定.
2. 最终结果
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论