1

我的 C 程序中有大量包含。在开发过程中,我尝试了不同的做事方式,所以我敢打赌,我已经包含了许多库,但没有使用。

编译器是否摆脱了不使用的库?有什么工具可以告诉我吗?即使编译器确实摆脱了代码,如果我可以摆脱一些东西,它也会整理源代码。

4

3 回答 3

2

实际上,决定什么最终进入可执行文件的不是编译器,而是链接器。现代链接器足够聪明,除非使用代码,否则不会从库中提取代码。因此,您可以链接到数百个库,但如果您不调用其中的任何函数,那么它们不会向您的程序添加任何代码。

至于头文件,大多数只包含声明和预处理器宏,它们不会自己添加代码。包含许多头文件的最大缺点是它会减慢源文件的编译速度。

于 2012-07-31T15:21:34.587 回答
1

不,该工具集将链接到您告诉它链接的任何库中。您可以通过诸如 Doxygen 之类的工具运行源代码,该工具将生成有关代码使用方式的文档页面和图表,但不一定告诉您您是否在正确或有效地使用图书馆。

由程序员决定是否需要该库并仔细选择执行程序所需的库。不必要的包含会增加编译时间,并可能使二进制文件膨胀。

于 2012-07-31T15:17:22.373 回答
0

可能对您有用的 Linux 实用程序

a)包含在您的目标代码/库中的符号(比如一个函数)

b)共享库的依赖项分别是nmldd工具。

下面的链接对于更多信息非常有用,

http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

于 2012-07-31T15:50:20.207 回答