GCC报告基于版本库的未引用符号

gcc report unreferenced symbol for version based library

本文关键字:引用 符号 版本 报告 于版本 GCC      更新时间:2023-10-16

我的一个共享库my。所以使用基于版本的符号作为symbol@@test_1.2.3从库test.so。当我链接我的。所以与我的可执行文件共享库,它说'未引用的符号符号@@test_1.2.3'。当链接行如下时,会发生这种情况-

g++ -o myexecutable myexecutable.o -L/path-to-my.so -lmy -L/path-to-test.so -ltest

如果我把链接改为-

g++ -o myexecutable myexecutable.o -L/path-to-my.so -lmy /path-to-test.so/libtest.so

它的工作原理。

为什么用-L指定libtest.so时不拾取,但当给出完整路径时却拾取?

我怀疑在某个地方有另一个libtest(可能是libtest.a), ld首先发现它没有您的程序正在寻找的符号。

使用-Wl,--verbose选项让链接器提供关于它正在打开或试图打开的文件的详细输出。这应该告诉您为什么一次运行的行为与另一次不同,以及'流氓' libtest在哪里(如果有的话)。