链接器是否防止重复链接

Does the linker prevent duplicated linkage?

本文关键字:链接 是否      更新时间:2023-10-16

经过一些研究和测试,我发现,当链接到库时,我的项目需要为运行库(MT、MD等)提供与我链接到的库相同的链接选项。

我想知道的是,如果我使用静态库(通常静态链接到运行库),我是否不会与运行库链接两次,因为它在我的库和应用程序中都是静态链接的?或者链接器阻止了这种情况?

通常静态库不会链接到运行库。相反,对运行库的所有引用都将保持未解析状态,即静态库文件将只包含代码的对象文件,而不包含运行库的对象文件。

只有当您使用该库构建实际的可执行文件时,才会链接到运行库,运行库将解析静态库中的打开引用。这通常是编译静态链接库时的默认行为。

也就是说,对于大多数编译器,您可以强制链接器解析静态库的外部引用。如果您的库具有不想传递给最终可执行文件编译的依赖项,那么这可能是有益的。

然而,如果这导致重复的符号,就像强制早期链接到运行时一样,可能会破坏链接器。如果幸运的话,你会收到一个关于重复符号的警告,但它可能根本不链接,这取决于链接器的实现。