在c ++中修剪静态库

时间:2009-11-05 00:19:42

标签: c++ linker

我试图通过构建一个静态库来暴露一个定义良好的类,然后通过一些定义该类的头文件以及使用它所需的接口来运送构建的库。我有这个工作,但我遇到的问题是图书馆是巨大的。它包含整个项目中的每个目标文件,我需要的只是一个子集。如果我创建一个简单的main.cpp文件并包含并使用该单个类,那么我得到的输出文件只有我正在使用的库的20%。有没有办法告诉链接器从给定的位置开始并修剪其他所有内容,如可执行的情况?

编辑:我忘了提到我在cygwin和linux上使用gcc(虽然我想要一个与visual studio兼容的解决方案,我们通常使用它进行开发但主要部署在linux上)

3 个答案:

答案 0 :(得分:0)

您必须将项目拆分。取出库所需的文件,并将其作为一个单独的项目来构建lib。

剩下的项目(使用main.cpp)需要调用新的lib项目来获取lib 详细信息取决于您用于管理项目的工具和操作系统(例如Visual Studio或make或...)

答案 1 :(得分:0)

你没有告诉我们你正在使用什么工具链但是因为你说项目,我猜你正在使用MS工具链。

MS工具链包括项目中的每个对象到静态库中。你想要做的是将你的单个课程分成一个单独的项目。您可以继续拥有包含该类的超级项目,这样您就不必修改任何现有项目。

现在,如果你想将它提升到一个新的水平,你应该考虑将该类的每个成员放入它自己的翻译单元(即.cpp文件)。这样,如果该类的用户只需要该类的几个部分,他们只需要链接他们需要的部分。

答案 2 :(得分:0)

制作共享库。从链接等角度来看,它的行为类似于可执行文件。它应该执行您在可执行文件中看到的丢弃。