7
我试图加载使用痛饮做了一个PHP扩展由PHP扩展的时候,却开始PHP时,我收到以下错误:未定义符号加载与痛饮
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626/libtg.so' - /usr/lib/php5/20090626/libtg.so: undefined symbol: __gxx_personality_v0 in Unknown on line 0
我试图加载扩展命名为libtg.so
,用命令编译:
g++ -shared libtg_wrap.o -o libtg.so
其中libtg_wrap.o
是用于通过SWIG生成的包装代码对象文件。
丢失的符号__gxx_personality_v0
在libstdc++.so
被发现,如明显从下面的命令:
$ nm -D /usr/lib/libstdc++.so.6 | grep __gxx_personality_v0
00000000000b9990 T __gxx_personality_v0
libstdc++.so
在libtg.so
引用,从以下命令明显:
$ ldd libtg.so
linux-vdso.so.1 => (0x00007fff5f932000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f3fc937c000)
libm.so.6 => /lib/libm.so.6 (0x00007f3fc90f9000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x00007f3fc8ee2000)
libc.so.6 => /lib/libc.so.6 (0x00007f3fc8b5f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3fc98fc000)
所以就不会看不出为什么它找不到符号。关于如何进一步调试的任何想法?
有趣的是,这工作!以前我使用'g ++'来直接链接而不是'ld' ...我想知道有什么区别。 – HighCommander4
其实应该没有什么区别,你可以用g ++来链接。既然你没有展示你如何编译.o文件,或者你如何调用swig命令或任何其他细节,我不能说更多..但我很高兴它的工作! :) – marcelog
.o文件是用'g ++ \'php-config5 --includes \'-c -fPIC -std = C++ 0x libtg_wrap.cpp'编译的,并且swig命令被调用为'swig -php - C++ libtg.i'。 – HighCommander4