2

我想知道是否有一种自动方法来提取大型 C++ 库的一小部分。

假设我在某个项目中只需要 boost::rational 。然而,整个提升 1.42 占用了 279 MiB!

为了让我的项目“自成一体”(一些学校作业的 fx),我希望能够将 boost::rational 与我自己的源一起包括在内。(想法是,我的老师不必为了编译而提前安装 1000 个库)

我知道这违反了良好的做法,因为实际上安装了整个 boost 会更好——但这个论点仍然适用于其他(鲜为人知的)大型库。

我想这个提取可以通过遍历根#include的#include依赖树来轻松完成(如boost/rational.hpp);但是有这样的工具吗?它叫什么名字?

4

1 回答 1

2

在 Linux 下,您可以使用“x”标志到“ar”从库中提取所有目标文件。

您可以使用“nm”来确定您的代码需要哪些符号,以及哪些(库)目标文件定义了它们。(有一个可选的--demangle标志,它可能有助于人类阅读输出。)

然后,您可以构建一个仅包含您需要的目标文件的新库。(通过"ar " 和"ranlib"。)或者直接在命令行上编译(链接)它们。

只需编写脚本即可找到(编译的)目标代码中缺少的符号,然后库中的哪些目标文件定义了它们。当然,那些需要其他库文件的库对象文件中缺少哪些符号……以及这些新库(对象)文件中缺少的符号……等等。等等。

它归结为(通常)收益太少的大量工作。尤其是当你遇到弱符号、间接引用等问题时。

于 2010-11-07T21:43:03.683 回答