如何在静态库中正确链接g++
How do I correctly link in static libraries with g++?
我正在尝试进行一个相当复杂的构建,但对于这个问题,我会稍微简化一下。我有三个c++文件(main.cpp file2.cpp和file3.cpp),我正试图编译它们,并将它们链接到3个静态库(libx.a-liby.z-libz.a)以生成可执行文件。
涉及到许多依赖关系。
所有三个c文件都依赖于所有三个库。libx依赖于liby和libz。最后,libx还依赖于file2.cpp.中包含的几个回调函数
什么命令行可以正确地构建它?我已经尝试了几十种变体,但还没有什么能让链接器满意。
如果重要的话,lib是用gcc编译的纯c代码。源代码是c++,我正在用g++编译/链接。作为一个visualstudio项目,我已经正确地完成了这项工作,并且正在尝试移植到linux。
来自您的帖子:
g++ main.cpp file2.cpp file3.cpp -lx -ly -lz
但是,如果静态链接给您带来了问题,或者您需要分发任何库,那么您可以考虑使它们成为共享对象(.so
文件,通常称为DSO)。在这种情况下,例如,当您构建libx.a
时,将所有源编译为对象文件,然后将它们与组合
g++ -shared *.o -o libx.so -ly -lz
(此版本假设liby.a
和libz.a
仍然是静态的,并将合并为libx.so
您可能需要在.cpp文件中使用extern "C" { }
来包含C库的头。
请参阅如何混合C和C++中的在C++中包含C标头。
相关文章:
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- CMake-按正确顺序将项目与C运行时对象文件链接
- 从链接列表c++中删除一个项目
- 有根的二进制搜索树.保留与其父级的链接
- 读取文件的最后一行并输入到链接列表时出错
- 静态数据成员的问题-修复链接错误会导致编译器错误
- node-gyp 在 macOS 上未正确链接库
- 基于boost的程序的静态链接——zlib问题
- 无法链接 CMake 中的本地库
- 内联函数中具有内部链接的全局变量
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 使用gcc从静态链接的文件中查找可选符号
- 我可以将一个用clang c++11编译的对象与另一个用c++17编译的对象链接起来吗
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 下面是我为检测链接列表中的循环而制作的代码
- 有了gcc,是否可以链接库,但前提是它存在
- 使用C链接在函数内部创建C++模板
- Visual Studio mkl_link_tool.exe链接错误
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- 有人能帮我处理这个链接列表吗?C++