链接多个共享对象时的未定义符号

时间:2015-05-07 08:02:53

标签: c++ gcc linker static-linking dynamic-linking

我与GCC有联系问题让我疯了。我在这方面的知识有点拼凑(来自谷歌)和即兴创作,所以我确信这是我的错,但我不知道我做错了什么。

希望有人可以让我摆脱痛苦。

以下是问题的简化版本。

我有一个静态库stat.a,它有一个名为A()的函数。这是第三方库,所以我不知道它是如何编译的。 在此库上运行nm会导致:

nm -C stat.a
...
00000001 T A()
         U A()
..

我假设A在一个.o文件中定义,并在另一个.o文件中使用。到目前为止一切都很好。

现在我正在构建一个包含一些新目标文件的共享对象,这些目标文件使用A()并使用-Wl链接到stat.a, - 整个存档(以防万一)。结果是dyna.so

第三步是构建一个名为problem.so的新分片对象,该对象的代码使用A()并在链接时使用-ldyna。

链接时我得到以下内容:

error: undefined reference to 'A()'

在dyna.so上运行nm会导致:

...
00028bf8 t A()
...

这意味着(据我的理解)它存在,但没有外化。

所以,

  1. 我的假设(关于外部和本地)是对的吗?
  2. 我想做的事情应该是可能的吗?
  3. 假设1& 2并且为真 - 我该怎么做才能解决这个问题?
  4. 提前致谢,非常感谢。

0 个答案:

没有答案