对于PHP扩展编译成功运行时提示未定义的符号xxx的问题的处理记录

1、 问题源于学习PHP扩展开发,教程在这,在此感谢龙哥!

码字完成后,顺利通过编译,重启fpm(使用的是nginx,扩展已加入php.ini中)完全正常。

运行测试脚本时,提示

php test_hello.php 
php: symbol lookup error: /usr/local/php/lib/php/extensions/no-debug-non-zts-20160303/say.so: undefined symbol: show_site 

test_hello.php源码如下:

<?php 
$hello = new hello(); 
var_dump($hello); 
$result = $hello->get(); 
var_dump($result);

2、仔细对比了下自己与龙哥的代码,连标准符号都没放过,除了代码放置的位置不一样,代码内容是一致的。包括hello.so生成的命令以及放入的目录均一样。

3、既然没链接上,那就手动链接

./configure LDFLAGS=-lhello
make && make install

重启fpm后,运行测试脚本,仍报上面的错误。

4、打开 Makefile 文件,看到最后一行存在 $(SAY_SHARED_LIBADD),再仔细一查,发现 Makefile 中无 $(SAY_SHARED_LIBADD)的赋值。

    手动对 SAY_SHARED_LIBADD 赋值,如下:

5、保存文件,将hello.so 改为 libhello.so

    为什么要改名呢,原因如下:

    接下来:

make clean
make && make install

6、重启fpm后,运行测试脚本,结果如下:

7、最后总结:

    导致Makefile文件缺少了对SAY_SHARED_LIBADD的赋值,原因在于自己忘了使用phpize命令。

资料参考:

    1、https://blog.csdn.net/wjc19911118/article/details/80239956

转载于:https://my.oschina.net/u/3017052/blog/1845439

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值