我的C程序中有大量的包含。在开发过程中,我尝试了不同的做事方式,所以我打赌我已经包含但未使用的库。
编译器是否摆脱了未使用的库?有工具可以告诉我吗?即使编译器确实摆脱了代码,如果我可以摆脱一些东西,它也会整理源代码。
答案 0 :(得分:2)
实际上并不是编译器决定什么最终进入可执行文件,而是链接器。除非使用代码,否则现代链接器非常聪明,不能从库中提取代码。所以你可以链接到数百个库,但是如果你不调用它们中的任何函数,那么它们就不会向你的程序添加任何代码。
对于头文件,大多数不包含声明和预处理器宏以外的任何内容,并且这些宏本身不会添加代码。包含许多头文件的最大缺点是它会减慢源文件的编译速度。
答案 1 :(得分:1)
不,工具集将链接到您告诉它链接的任何库。您可以通过Doxygen等工具运行源代码,这将生成有关如何使用代码的文档和图表页面,但它赢了不一定要告诉你是否正在正确或有效地使用图书馆。
由程序员决定是否需要库并仔细选择执行程序所需的库。不必要的包含会增加编译时间,并且可能会使二进制文件膨胀。
答案 2 :(得分:0)
可能对您有用的Linux实用程序
a)包含符号(比如函数),它位于目标代码/库
中b)共享库的依赖关系分别为 nm 和 ldd 工具。
以下链接对于更多信息非常有用,
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html