gpt4 book ai didi

c - 链接器如何决定要包含库的哪些部分?

转载 作者:太空狗 更新时间:2023-10-29 16:51:49 25 4
gpt4 key购买 nike

假设库 A 有 a() 和 b()。如果我将我的程序 B 与 A 链接并调用 a(),b() 是否包含在二进制文件中?编译器是否查看程序中是否有任何函数调用 b()(也许 a() 调用 b() 或另一个库调用 b())?如果是这样,编译器如何获得这些信息?如果不是,如果我链接到一个大库但只使用一个次要功能,这不是对最终编译大小的巨大浪费吗?

最佳答案

看看link-time optimization .这必然取决于供应商。它还将取决于您如何构建二进制文件。 MS 编译器(至少从 2005 年起)提供了一种叫做 Function Level Linking 的东西。 -- 这是另一种剥离不需要的符号的方法。 This帖子解释了如何使用 GCC 实现相同的目的(这是旧的,GCC 必须继续前进,但内容与您的问题相关)。

另请查看 LLVM实现(和示例部分)。

我建议你也看看Linkers and Loaders约翰·莱文 (John Levine) 着——非常棒的读物。

关于c - 链接器如何决定要包含库的哪些部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/715502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com