我剛剛重新安裝我的服務器,從Ubuntu 11.04切換到11.10和從32位切換到64位。之後,我嘗試重新安裝我的自定義SWIG PHP擴展。調試SWIG PHP擴展:undefined symbol:_ZN15SplashOutputDev9updateAllEP8GfxState
我
swig -I/usr/local/include/poppler -Wall -php -c++ popplig.i
g++ -g -I. -I/usr/local/include/poppler -I/usr/include/php5 -I/usr/include/php5/main -I/usr/include/php5/TSRM -I/usr/include/php5/Zend -I/usr/include/php5/ext -I/usr/include/php5/ext/date/lib -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -fpic -c popplig_wrap.cpp ExtensibleOutputDev.cc PDFFont.cc HtmlLinks.cc PDFImage.cc MarkedContentState.cc Error.cc
g++ -Wall -Wextra -g -lpoppler -shared popplig_wrap.o ExtensibleOutputDev.o PDFFont.o HtmlLinks.o PDFImage.o MarkedContentState.o Error.o -o popplig.so
的鏈接,沒有錯誤或警告完成編譯。
但是當我運行PHP時得到
$ php -r ""
PHP Warning: PHP Startup: Unable to load dynamic library '/atlas/www/txtbear/poppler-swig/popplig.so' - /atlas/www/txtbear/poppler-swig/popplig.so: undefined symbol: _ZN15SplashOutputDev9updateAllEP8GfxState in Unknown on line 0
此符號在我的libpoppler
$ nm -g /usr/local/lib/libpoppler.so | grep _ZN15SplashOutputDev9updateAllEP8GfxState
0000000000141370 T _ZN15SplashOutputDev9updateAllEP8GfxState
LD知道poppler的
$ sudo ldconfig -v | grep poppler
libpoppler-cpp.so.0 -> libpoppler-cpp.so.0.1.0
libpoppler.so.6 -> libpoppler.so.6.0.0
libpoppler.so.6 -> libpoppler.so.6.0.0
libpoppler-glib.so.6 -> libpoppler-glib.so.6.0.0
複製定義,但我的分機沒有按」似乎與它有聯繫(儘管-lpoppler
)
$ ldd popplig.so
linux-vdso.so.1 => (0x00007fffbd079000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fa104957000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa1046d3000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fa1044bc000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa10411d000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa10502b000)
所以看來問題在於g ++沒有鏈接到libpoppler。我怎麼知道鏈接出了什麼問題?
'file/usr/local/lib/libpoppler.so'說的是什麼? 'ldd/usr/local/lib/libpoppler.so'可能會有所幫助。 – msandiford