C++ 在静态库中包含静态库-代码块
我在使用Code::Blocks 13.12编译静态库时遇到问题。我需要从我自己的静态库中使用第三方静态库。所以,我有libOtherLib.a,我正试图在libOtherLib.a中构建libMyLib.a和link。问题是链接器在构建的链接阶段没有包含libOtherLib.a。以下是一些附加信息:C++ 在静态库中包含静态库-代码块,c++,c,linker,static-libraries,codeblocks,C++,C,Linker,Static Libraries,Codeblocks,我在使用Code::Blocks 13.12编译静态库时遇到问题。我需要从我自己的静态库中使用第三方静态库。所以,我有libOtherLib.a,我正试图在libOtherLib.a中构建libMyLib.a和link。问题是链接器在构建的链接阶段没有包含libOtherLib.a。以下是一些附加信息: 我正在使用GNU GCC编译器 整个项目的项目内构建选项(不是专门调试或发布) 我已经在链接器设置的链接库列表中添加了libOtherLib.a 我已经在搜索目录->链接器列表中添加了li
- 我正在使用GNU GCC编译器
- 我已经在链接器设置的链接库列表中添加了libOtherLib.a
- 我已经在搜索目录->链接器列表中添加了libOtherLib.a的路径
- 我已经在搜索目录->编译器列表中为libOtherLib.a添加了.h文件的路径
- 该库编译完全正常(生成bin/Debug/libMyLib.a,没有错误)
ar -r -s bin/Debug/libMyLib.a <all of my .o files>
ar-r-sbin/Debug/libMyLib.a
问题的可能原因也很好——如果这主要是编译器、链接器、设置或代码::块本身 不能在另一个静态库中链接静态库。 但是,您可以这样做: 假设MyPrograme.exe需要链接静态库libMyLib.a,则使MyPrograme.exe也链接libOtherLib.a 由于libMyLib.a是静态库,因此不需要链接libMyLib.a,只需包含标题即可
当构建一个静态库时,它只会被编译,而不会被链接。构建一个静态库时,您只是将一组对象文件放在一个更易于发布和使用的实体中。构建静态库时不进行链接 在构建应用程序或某些共享对象时,将处理库中未解析的引用。您只需提供您的库,并要求用户在构建库时也提供您的库 如果要在库中包含所依赖的库,可以从tgat库中提取对象文件并将其包含到库中。虽然技术上可能,但您是否有权这样做是值得怀疑的。另外,这通常不是事情的处理方式,我建议不要这样做。尽管有这些“链接不是这种哲学的正确术语”,但您可以通过补丁代码::块编译器配置来支持这一点,例如GCC/G++编译器 其想法是将GCC“高级编译器选项”窗口中的“将对象文件链接到静态库”脚本替换为:
rm -f $static_output
$lib_linker -r -s -T $static_output $link_objects
$lib_linker -r -c -T $static_output $link_options
然后可以将“libOtherLib.a”的相对路径放在项目的“其他链接器选项”编辑框中。这个mod实际上并没有得到官方认可,但它在我的项目中起作用,所以你可以在静态libs中获得静态libs,就像在msvisualstudio中一样
ar
不是链接器。构建静态库时不使用链接器。通常不会将一个静态库放入另一个静态库。要使用MyLib
的应用程序应该同时链接MyLib
和OtherLib
。我最初尝试将这两个库链接到控制台应用程序项目,但当它尝试链接libMyLib.a时出现编译错误,因为它找不到libOtherLib.a(我得到了对…错误的未定义引用)。我认为这是以错误的顺序连接它们,但我认为这是一个完全不同的问题。