【问题标题】:gcc report unreferenced symbol for version based librarygcc 报告基于版本的库的未引用符号
【发布时间】:2011-07-18 15:56:07
【问题描述】:

我的一个共享库 my.so 使用基于版本的符号作为库 test.so 中的符号@@test_1.2.3。当我将 my.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

它有效。

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

【问题讨论】:

  • 第一个例子中-ltest-lmy的顺序你试过了吗?
  • 感谢您的回复。我在发布我的问题之前尝试过这个,但它没有帮助。
  • 你有没有尝试改变这两个库的路径,比如g++ -o myexecutable myexecutable.o -L/path-to-my.so/libmy.so /path-to-test.so/libtest.so

标签: c++ gcc linker g++


【解决方案1】:

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

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

【讨论】:

  • 调试选项可以解决问题。图书馆是从一个嵌套位置挑选出来的,如果没有这个选项,这个位置很难调查。谢谢。
猜你喜欢
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多