c++ - 在静态库中包含静态库 - CodeBlocks

标签 c++ c linker static-libraries codeblocks

我在使用 Code::Blocks 13.12 编译静态库时遇到问题。我需要在我自己的静态库中使用第三方静态库。所以,我有 libOtherLib.a,我正在尝试构建 libMyLib.a 并链接到 libOtherLib.a。问题是链接器在构建的链接阶段不包括 libOtherLib.a。以下是一些附加信息:

  • 我正在使用 GNU GCC 编译器

在整个项目的项目构建选项中(不特别是调试或发布)

  • 我在链接器设置的链接库列表中添加了 libOtherLib.a
  • 我已经在搜索目录 -> 链接器列表中添加了 libOtherLib.a 的路径
  • 我已经在搜索目录 -> 编译器列表中为 libOtherLib.a 添加了 .h 文件的路径

  • 库编译完全正常(生成 bin/Debug/libMyLib.a 没有错误)

如有任何帮助,我们将不胜感激。我有一个暗示,它与这是一个静态库而不是一个应用程序(控制台或其他)有关,但我不确定如何或为什么。我确实在“项目属性”窗口中将构建目标类型更改为“控制台应用程序”,它看起来像是在 libOtherLib.a 中链接,但它还有其他错误,因为这段代码是一个库而不是一个应用程序。

这是在构建结束时执行的链接器命令。 libOtherLib.a 不在任何地方,这就是问题所在,只是不确定解决方案是什么。

ar -r -s bin/Debug/libMyLib.a <all of my .o files> 

问题的可能原因也很好 - 如果这主要是编译器、链接器、设置或 Code::Blocks 本身。

最佳答案

构建静态库时,您只是将一堆对象文件放在一起,形成一个更易于发布和使用的实体。构建静态库时没有链接。

在构建应用程序或某些共享对象时会处理库中未解析的引用。您只需发布您的库,并要求用户在构建时也提供您的库所依赖的库。

如果您想在您的库中包含您所依赖的库,您可以从 tgat 库中提取目标文件并将它们包含到您的库中。尽管在技术上可行,但您是否有权这样做值得怀疑。此外,这通常不是做事的方式,我建议不要这样做。

关于c++ - 在静态库中包含静态库 - CodeBlocks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25494966/

相关文章:

c++ - OpenGL 和 GLUT/C++ 奇怪的纹理循环问题

c - 如何测试具有内部状态的函数?

c - 错误,从 txt 文件扫描到 C 中的结构时应出现 ']'

c++ - 在多线程 HTTP 服务器中发送后如何干净地关闭套接字?

objective-c - 框架链接错误,找不到图像?

c++ - 共享库 libbar.so 静态链接到 libfoo.a,程序链接到 libbar.so 和 libfoo.so,会发生什么?

c++ - 了解 std::isnan 的编译结果

c++ - 从 C++ 中的 Protocol Buffer 获取所有字段名称?

c++ - QTreeView 策略子类。这是理智的吗?

c++ - 从另一个文件调用 C++ 函数时出现 "Undefined Symbols"