共享库中的未定义符号

时间:2016-06-15 11:33:38

标签: linux gcc g++ shared-libraries

我在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 个答案:

答案 0 :(得分:4)

默认情况下,编译和链接共享库不会报告未定义的符号。

生成可执行文件时将报告它们,其中必须定义所有符号。

如果您想强制停止构建lib并提供错误,则必须启用 --no-undefined 选项。