で作られたPHP拡張モジュールをロードするとき、私はPHP拡張モジュールをロードしようとしているがSWIGを使用しますが、PHPの起動時に、私は次のエラーを取得しています作られましたlibtg.so
を命名して、コマンドでコンパイルされました:libtg_wrap.o
はSWIGによって生成されたラッパーコード用のオブジェクトファイルである未定義シンボルSWIG
g++ -shared libtg_wrap.o -o libtg.so
。
欠落シンボル__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)
のでドンなぜそれがシンボルを見つけることができないのか分からない。どのように私はこれをさらにデバッグすることができますか?
興味深いことに、それはうまくいった!以前は 'ld'ではなく' g ++ 'を直接使っていました...違いは何ですか? – 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