如何在静态库中使用g ++正确链接?

时间:2013-02-12 16:28:25

标签: c++ c gcc linker g++

我有一个相当复杂的构建我正在尝试做,但我会简化这个问题的一点点。我有三个c ++文件(main.cpp file2.cpp和file3.cpp),我试图编译并链接3个静态库(libx.a liby.z libz.a)以生成可执行文件。

涉及许多依赖项。

所有三个c文件都依赖于所有3个库。 libx依赖于liby和libz。最后,libx还依赖于file2.cpp中包含的几个回调函数。

什么命令行可以正确构建它?我已经尝试过几十种变体,但是没有任何东西能满足链接器。

如果重要,libs是用gcc编译的纯c代码。来源是c ++,我正在编译/链接g ++。我把它作为一个visual studio项目正常工作,我正在尝试移植到linux。

2 个答案:

答案 0 :(得分:2)

从你的帖子:

g++ main.cpp file2.cpp file3.cpp -lx -ly -lz

但是,如果静态链接导致您出现问题,或者您需要分发任何lib,那么您可以考虑将它们设为共享对象.so文件,通常称为数字存储示波器)。在这种情况下,例如,当您构建libx.a时,将所有源代码编译为目标文件,然后将它们与

组合在一起。
g++ -shared *.o -o libx.so -ly -lz

(此版本假定liby.alibz.a仍为静态,并将合并为libx.so

答案 1 :(得分:0)

您可能需要在.cpp文件中使用extern "C" { }来包含C libs的标头。

请参阅Including C Headers in C++中的How To Mix C and C++