0

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

有很多依赖关系。

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

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

如果重要的话,这些库是用 gcc 编译的纯 c 代码。源代码是 c++,我正在用 g++ 编译/链接。我将它作为一个 Visual Studio 项目正常工作,并且正在尝试移植到 linux。

4

2 回答 2

2

从你的帖子:

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

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

g++ -shared *.o -o libx.so -ly -lz

(这个版本假设liby.alibz.a仍然是静态的,并且将被组合成libx.so

于 2013-02-12T16:32:32.283 回答
0

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

请参阅如何混合 C 和 C++中的在 C++中包含 C 标头

于 2013-02-12T16:49:19.333 回答