C++ 链接器中不必要的链接库

C++ 链接器中不必要的链接库,c++,linker,C++,Linker,我有一个项目,我可以从链接器中排除一些库,并且仍然构建 就最终产品的性能和内存而言,是否最好将它们排除在外?将一些未使用的库从最终可执行文件中排除可能会使启动速度加快,并节省少量内存-很可能只有头和库启动代码将实际加载,这些可以在启动后调出 但是,不要手动执行此操作。如果你被告知要添加库,可能是有原因的——也许你还没有使用的某个函数调用需要它,后来如果你使用该函数调用,你可能已经忘记了它 大多数链接器都有一个自动排除未使用库的选项,所以您可能只想启用该选项,让它为您处理一些事情 注意:在一些罕见

我有一个项目,我可以从链接器中排除一些库,并且仍然构建


就最终产品的性能和内存而言,是否最好将它们排除在外?

将一些未使用的库从最终可执行文件中排除可能会使启动速度加快,并节省少量内存-很可能只有头和库启动代码将实际加载,这些可以在启动后调出

但是,不要手动执行此操作。如果你被告知要添加库,可能是有原因的——也许你还没有使用的某个函数调用需要它,后来如果你使用该函数调用,你可能已经忘记了它

大多数链接器都有一个自动排除未使用库的选项,所以您可能只想启用该选项,让它为您处理一些事情


注意:在一些罕见的情况下,库的启动代码可能会有一些重要的影响,在这种情况下,您不应该排除它。这一点最好通过检查图书馆的文档来确定;这样的事情应该(希望)被清楚地记录下来。

< P>一个好的C++链接器将不包含任何代码中未使用的LIB调用(所谓的“死代码剥离”)。p> <>所以,我想说它取决于你用什么样的C++链接器来发布最终的版本。也许你应该参考你的链接器文档来获得关于死代码剥离的信息。如果它不这样做,那么它肯定会有助于减少程序的最终内存占用


干杯,希望这些信息有帮助

是的,最好排除不必要的库

这应该没有什么区别

任何有价值的链接器都不会包含应用程序未(直接或间接)引用的库中的任何内容,即使这些库是在命令行上指定的。
包括图书馆(一部分)的唯一原因是: -应用程序使用库中的函数或全局对象 -包含用于解析某些引用的库的一部分具有对此库的函数或全局对象的引用

链接器不仅仅是盲目地将您提供的所有内容放在一个应用程序中,它还区分了对象文件(用于应用程序)和库。
链接器首先收集所有对象文件,并解析文件之间的尽可能多的引用。
之后,链接器遍历指定的库,并从每个库中获取解析(已知)未解析引用所需的部分。由于库之间的依赖关系,这可能会创建新的未解析引用。大多数链接器只对库进行一次传递,但有些链接器可能会执行多次传递以解析所有引用。
不需要解析引用的库部分不包括在可执行文件中。

我认为这充其量只是误导,根据我使用GNU工具链进行交叉编译的经验,这是不正确的。