如何在Eclipse CDT中将静态库链接到静态库

时间:2011-09-06 15:59:57

标签: c++ linux linker static-libraries eclipse-cdt

我有3个项目A,B和C. A是通用的,由B使用,最终使用C. B有点特别,到目前为止仅由C使用。

现在我希望尽可能多地重用A和B,我认为它们都是静态库。

所以我将A和B链接到静态库,将C链接到可执行文件,但是当我想链接C时 它给了我一些关于A函数的undefined reference错误。所以我将库A添加到链接器选项中以解决此问题,但它没有帮助。

所以我想:当我想部署B时,我还必须部署A才能进行链接。有没有办法将静态库A链接到静态库B,所以我不必部署2个文件?

如果是这样,我如何使用Eclipse CDT实现这一目标,因为我无法找到为归档程序定义其他目标的位置。

加成

我在linux下工作,但事情也应该在windows下工作。但主要是我需要一个linux的解决方案来继续开发。

修改

现在我通过将A和B链接到静态库然后使用剩余的* .o文件将它们链接到可执行文件来解决问题,但我不认为这很好。

2 个答案:

答案 0 :(得分:3)

更改您的链接顺序。 C使用B,B使用A. C不直接使用A,对吗?

你写道:

gcc -o C -lA -lB

它不起作用。你写的

gcc -o C -lB -lA

它有效。

如果是CDT,您可以转到选项 - > C / C ++构建 - >设置 - > XXX C链接器 - >库> ,并更改A和B的顺序。

另一种方法:使用-u选项。

看到这个: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html 但是,我从未成功过。 愿任何人告诉我如何使用-u选项吗?

答案 1 :(得分:1)

静态库无法与另一个静态库链接。我认为因为静态库不是可执行代码,所以没有完成完整的链接过程(主要是引用解析)。它仅适用于动态库和可执行文件。