2011-09-06 134 views
3

我有3个项目A,B和C. A是通用的,并且由B使用并最终使用C. B有点特别,并且到目前为止仅用于C.如何在Eclipse中将静态库链接到静态库中CDT

现在,当我希望A和B尽可能重用时,我想都是静态库。

因此,我将A和B链接到静态库并将C链接到可执行文件,但是当我想链接C 时,它会在A函数上给我一些undefined reference错误。所以我将库A添加到链接器选项来解决这个问题,但它没有帮助。

所以我想:当我想部署B,那么我也将不得不部署A能够链接。有没有办法将静态库A链接到静态库B中,所以我不必部署2个文件?

如果是这样,那么如何使用Eclipse CDT实现此目标,因为我无法找到为归档人员定义其他目标的地方。

加成

我正在linux下的,但事情还应该在Windows下运行。但主要是我需要一个针对linux的解决方案来跟上发展。

编辑

现在,我通过将A和B为静态库,然后用剩下的* .o文件将其链接到可执行文件“解决”这个问题,但我不认为这是很好的。

回答

1

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

+0

所以你说我应该将它们编译成动态库? – Nobody

+0

是的,要部署B单独使用,不使用C,最好将其作为动态库 –

+0

哦,对不起,忘了提及我在linux下,但我试图成为平台独立。当然,链接不能独立于平台,所以我首先需要一个可用的linux版本。 – Nobody

3

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

你写:

gcc -o C -lA -lB 

将无法​​正常工作。你写

​​

它的工作原理。

如果CDT,你可以去option-> C/C++ Build-> setting-> XXX C linker-> Libraries,并改变A和B的顺序。

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

看到这个: http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html 但是,我从来没有成功。 有谁能告诉我如何使用-u选项?