静态和共享库链接器错误

时间:2013-04-13 17:31:42

标签: c++ linker static-libraries

我正在使用NDK(用于android的本机编译工具)。所以,情况看起来像这样:

Static boost → Shared helpers
                       ↓
                  Shared Game

Helpers是一些用于游戏开发的共享库。 shared game是一个由java代码包含的库(作为本机库加载)。 Helpers lib在内部使用boost,链接器在这里很好。共享游戏通过助手api使用boost,但编译失败。

链接器无法解析boost_system库中的某些符号。所以,我确实喜欢这个:

Static boost → Shared helpers
     |                  ↓
     +----------- → Shared Game

现在它编译得很好。怎么了?我认为我可以将boost一次链接到帮助器并在共享游戏中使用它们。

1 个答案:

答案 0 :(得分:1)

没有错。正如您所说,您希望shared game仅使用由shared helpers动态库导出的shared helpers API。你的错误是shared game仍然依赖于一些显然不由shared helpers导出的裸Boost API。这就是为什么你必须明确地将Boost链接到shared game,以便正确解析这些Boost符号。

如果你想从Boost API中完全抽象并消除这种依赖性,那么你必须通过扩展shared game来包装这个Boost API(在shared helpers中需要)(当然,不要不要忘记从shared helpers导出这个包装的 API。