2016-06-15 32 views
1

私はlinuxで共有ライブラリをコンパイルしました。ライブラリが生成された後。私はldd -r libfoo.soを実行します。それは共有ライブラリの未定義のシンボル

私のエラーメッセージは以下の通りである未定義シンボルエラーが付属して

ldd -r libcaffe.so 
    linux-vdso.so.1 => (0x00007fffdd541000) 
    /opt/alisentry/$LIB/alisentry_connect.so =>   
    /opt/alisentry/lib64/alisentry_connect.so (0x00007ff8777bc000) 
    /opt/alisentry/$LIB/alisentry_exec.so =>  
    /opt/alisentry/lib64/alisentry_exec.so (0x00007ff8775b8000) 
    /opt/alisentry/$LIB/alisentry_kill.so => 
    ... 
    libc.so.6 => /lib64/libc.so.6 (0x00007ff876291000) 
    /lib64/ld-linux-x86-64.so.2 (0x0000003671800000) 
undefined symbol: 
     _ZN2cv12mulSpectrumsERKNS_11_InputArrayES2_RKNS_12_OutputArrayEi 
     (./libcaffe.so) 
undefined symbol: _ZN2cv17getOptimalDFTSizeEi (./libcaffe.so) 
undefined symbol: _ZN2cv3dftERKNS_11_InputArrayERKNS_12_OutputArrayEii (./libcaffe.so) 

私の質問は、共有ライブラリがコンパイルとリンクを終えたということです。なぜまだ定義されていないシンボルがあるのですか?リンクステージでは起こらないのはなぜですか?

+1

おそらく、それは前提条件としてリンクされる別のライブラリが必要です。 – LPs

+0

別のlibが必要な場合。コンパイル中にエラーが発生するはずです – Samuel

答えて

3

共有ライブラリをコンパイルしてリンクすると、デフォルトでは未定義のシンボルは報告されません。

実行可能ファイルの生成時に、すべてのシンボルを定義する必要があると報告されます。

にlibビルドを強制停止し、エラーが発生した場合は、--no-undefinedオプションを有効にする必要があります。

関連する問題