我想知道是否有一种自动提取大型C ++库的方法。
假设我在某个项目中只需要boost :: rational。然而,整个提升1.42需要279 MiB!
为了保持我的项目“自足”(某些学校工作的fx),我希望能够将boost :: rational与我自己的源码一起包含在内。 (想法是,我的老师不应该提前安装1000个库以便编译)
我知道这违反了良好的做法,因为实际安装整个boost会更好 - 但是这个论点仍然适用于其他(不太知道的)大型库。
我猜这个提取可以通过遍历根#include的#include依赖树(如boost / rational.hpp)轻松完成;但是有这样的工具吗?它叫什么名字?
答案 0 :(得分:2)
在Linux下,您可以使用“x”标记“ar”从库中提取所有目标文件。
您可以使用“nm”来确定代码需要哪些符号,以及哪些(库)对象文件定义它们。 (有一个可选的 - demangle 标志,可能有助于人类阅读输出。)
然后,您可以构建一个仅包含所需对象文件的新库。 (通过“ar ”和“ranlib”。)或者直接在命令行上编译(链接)它们。
脚本编写很简单,找不到(编译好的)目标代码中缺少的符号,然后从库中定义哪些目标文件。当然,那些需要其他库文件的库对象文件中缺少哪些符号......以及这些新库(对象)文件中缺少的那些...依此类推。等等。
归结为很多工作(通常)收益太少。特别是当你遇到像弱符号,间接引用等等的东西时