在 linux 中编译/链接多个 c++ 库
Posted
技术标签:
【中文标题】在 linux 中编译/链接多个 c++ 库【英文标题】:Compiling/Linking multiple c++ libraries in linux 【发布时间】:2017-07-06 05:45:27 【问题描述】:我有 3 个没有依赖关系的独立库,它们自己专有,使用 g++ -c 单独编译,然后使用 ar rvs *.o
单独添加到单独的存档中。
我现在有 3 个独立的档案。
我现在有另一个依赖于所有 3 个以前的库的第 4 个库。如何编译我的第 4 个库以包含其他 3 个专有库,以在 main.cpp 程序中使用所有 4 个(仅引用第 4 个库)?
我是一个 g++/linux/makefile 完全初学者。
【问题讨论】:
将这些目标文件放入第四个库的编译命令中。g++ -c lib4.cpp lib1.o lib2.o lib3.o
然后编译 main 与所有 4 使用 g++ main.cpp lib1.o lib2.o lib3.o lib4.o
"[then] ... 使用ar rvs *.o
...添加到单独的存档中 - 确保在存档上运行ranlib
以生成索引。
我以为 s 选项会创建索引?
【参考方案1】:
第四个库是静态库还是动态库?
前三个库是静态库,它们只不过是目标文件的存档。如果是第四个库,那么您无需对其进行任何操作,只需创建存档即可。
问题在于链接 与第四个库。由于静态库只不过是目标文件的存档,因此您需要与所有四个库链接。您还需要在链接器的命令行上正确放置库:如果库 A 依赖于库 B,则 A 需要在链接器命令行上在 B 之前。
另一方面如果第四个库是一个共享库,那么它就像一个可执行程序一样被链接,并且当你这样做时,你会像往常一样链接所有需要的库。那么在使用共享库创建程序时,就不需要链接依赖了。
对于实际的命令行,最简单的方法是在链接时添加库:
$ g++ main.o -o my_program lib4.a lib3.a lib2.a lib1.a
以上命令用于链接静态库,并在创建main.cpp
源的目标文件之后。
【讨论】:
以上是关于在 linux 中编译/链接多个 c++ 库的主要内容,如果未能解决你的问题,请参考以下文章