在编译C程序时,gcc默认链接标准C库。是否可以仅链接所选的函数,比如printf
而不是完整的C标准库,以尝试将可执行文件的大小减少到最低限度?
答案 0 :(得分:5)
对于大多数传统链接器,静态库链接是在目标文件的基础上完成的。 gcc通常会使用您正在使用的系统上的系统链接器。
传统上,静态库只是一个归档文件,由构成库的目标文件组成。当您将静态库链接到程序时,链接器将从库中提取任何有助于解析程序中任何未解析符号的目标文件,包括由库中的目标文件引入的有助于解析以前未解析的符号的文件。
理论上,如果标准库实现由每个函数的一个目标文件组成,并且标准库函数之间没有依赖关系,那么您将只获得您明确调用的函数。在实践中,您可能会获得比明确调用包含的功能更多的功能。
动态链接完全不同。在这种情况下,您的程序将只包含对标准库共享对象的引用,该对象将在运行时完整地加载到您的进程内存空间中。