共享库中未定义的符号

Sam*_*uel 2 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)
Run Code Online (Sandbox Code Playgroud)

我的问题是共享库已完成编译和链接。为什么它仍然有未定义的符号,为什么它在链接阶段不发生

LPs*_*LPs 5

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

当您生成可执行文件(必须定义所有符号)时,将报告它们。

如果要强制停止lib构建并给您错误,则必须启用--no-undefinedoption。

  • 我认为它是 `-Wl,--no-undefined`,因为你指的是 `gcc`。`--no-undefined` 适用于 `ld` 然而。只是为了避免混淆... (2认同)