PHP7扩展开发之引入外部so库遇到的问题

2 篇文章 0 订阅
1 篇文章 0 订阅

1. 问题由来?

参考龙哥的文章开发一个使用外部库的扩展,(这里非常感谢龙哥)遇到了如下问题:
1. 开发扩展文章地址: PHP7扩展开发之对象方式使用lib库

  1. 报错信息:php7: symbol lookup error: /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303/uselib.so: undefined symbol: show_site

2. 调试过程

第一次分析


  1. 因为编译成功没有错误,所以先查看编译后的uselib.so扩展中查看符号show_site的类型
    -这里写图片描述

可以看到show_site的类型为U

U的解释
该符号在当前文件中是未定义的,即该符号的定义在别的文件中。 例如,当前文件调用另一个文件中定义的函数,在这个被调用的函数在当前就是未定义的;但是在定义它的文件中类型是 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. 解决问题从新编译

sudo make clean
sudo make
sudo make install
1. 报错

这里写图片描述

不能发现hello链接库,于是查看目录/usr/local/lib/下面的确有hello.so文件,为啥提示找不到呢,其实这里只要将hello.so修改为libhello.so即可,然后在次执行上面的编译过程,搞定.

2. 最终结果

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值