2011-10-23 11 views
1

Ubuntu 11.04から11.10および32から64ビットに切り替えるだけで、サーバを再インストールしました。その後私はカスタムSWIG PHP拡張を再インストールしようとしました。SWIG PHP拡張モジュールのデバッグ:未定義シンボル:_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 

を知っている。しかし、私の拡張子は」doesnのそれにリンクされているようです(-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) 

したがって、libpopplerにリンクしていないg ++に問題があるようです。どうやってリンクがうまくいかないのか分かりますか?

+0

「ファイル/ usr/local/lib/libpoppler.so」とは何ですか? 'ldd/usr/local/lib/libpoppler.so'も役立ちます。 – msandiford

答えて

0

g++ -Wall -Wextra -g -lpoppler -shared popplig_wrap.o...

このコマンドラインが正しくありません:ライブラリはリンク行にそれらを使用するオブジェクトをたどることになっています。リンク行の最後に-lpopplerを移動する

  1. は、それが未解決のシンボル問題を修正ldd popplig.so
  2. に表示してくださいますかどうかを確認してください。
+0

それは、ありがとう! – justmoon

関連する問題