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)的赋值。
手动对 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