我与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()
...
这意味着(据我的理解)它存在,但没有外化。
所以,
提前致谢,非常感谢。