php 提示未定义,对于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源码如下:

$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)的赋值。

aeb062eef0432226f976e6ffe2058fb8.png

手动对 SAY_SHARED_LIBADD 赋值,如下:

0074c8fce4bf9714baa4c768fc6e169b.png

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

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

238e53cb55bebaac27fe8301dcd7f8be.png

接下来:

make clean

make && make install

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

a7f0fd1cf0c023428c2239d519bd6cee.png

7、最后总结:

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

资料参考:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值