我有一个相当复杂的构建我正在尝试做,但我会简化这个问题的一点点。我有三个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。
答案 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.a
和libz.a
仍为静态,并将合并为libx.so
答案 1 :(得分:0)
您可能需要在.cpp文件中使用extern "C" { }
来包含C libs的标头。