我在使用Code :: Blocks 13.12编译静态库时遇到问题。我需要在我自己的静态库中使用第三方静态库。所以,我有libOtherLib.a,我试图在libOtherLib.a中构建libMyLib.a和链接。问题是链接器在构建的链接阶段不包括libOtherLib.a。以下是一些其他信息:
在整个项目的项目构建选项中(不是专门的调试或发布)
我在搜索目录中为libOtherLib.a添加了.h文件的路径 - >编译器列表
库编译完全正常(生成bin / Debug / libMyLib.a且没有错误)
非常感谢任何帮助。我有一个暗示它与静态库而不是应用程序(控制台或其他)有关,但我不确定如何或为什么。我确实将构建目标类型更改为"控制台应用程序"在Project Properties窗口中,它看起来像是在libOtherLib.a中链接,但它有其他错误,因为这段代码是一个库而不是一个应用程序。
这是在构建结束时执行的链接器命令。 libOtherLib.a不在任何地方,这就是问题,只是不确定解决方案是什么。
ar -r -s bin/Debug/libMyLib.a <all of my .o files>
问题的可能原因也很好 - 如果这主要是编译器,链接器,设置或Code :: Blocks本身。
答案 0 :(得分:3)
构建静态库时,您只需将一堆目标文件放在一个易于发布和使用的实体中。构建静态库时,没有链接已完成。
在构建应用程序或某些共享对象时,会处理来自库的未解析引用。您只需发送图书馆,并要求用户在构建时也提供图书馆所依赖的库。
如果要包含库中依赖的库,可以从tgat库中提取目标文件并将其包含在库中。虽然技术上可行,但如果您有权这样做,则值得怀疑。此外,这通常不是事情的完成方式,我建议不要这样做。
答案 1 :(得分:1)
您无法链接anoter静态库中的静态库。 但是,您可以这样做:
假设MyPrograme.exe需要链接静态库libMyLib.a,make MyPrograme.exe也链接libOtherLib.a。
由于libMyLib.a是静态库,因此无需链接libMyLib.a.Just包括标题。
构建静态库时,它只会被编译,而不能被链接。
答案 2 :(得分:1)
尽管所有这些&#34;链接不适合这个&#34;您可以修改Code :: Blocks编译器配置以支持此功能,例如GCC / G ++编译器。
http://green-candy.osdn.jp/codeblocks_config.html
我们的想法是将&#34; Link对象文件替换为静态库&#34; &#34;高级编译器选项中的脚本&#34;海湾合作委员会的窗口:
rm -f $static_output
$lib_linker -r -s -T $static_output $link_objects
$lib_linker -r -c -T $static_output $link_options
然后你可以把相对路径放到&#34; libOtherLib.a&#34;在&#34;其他链接器选项&#34;你的项目的编辑框。这个mod并没有真正得到正式认可,但它适用于我的项目,因此你可以在静态库中获得静态库,就像在MS Visual Studio中一样!