经过一些研究和测试后,我发现,当链接到库时,我的项目需要为我正在链接的库提供与运行时库(MT,MD等)相同的链接选项。
我想知道的是,如果我使用静态库(通常静态链接到运行时库),我是不是与运行时库链接两次,因为它在我的库和我的应用程序中静态链接?或链接器阻止这个?
答案 0 :(得分:1)
通常,静态库不会链接到运行时库。相反,对运行时的所有引用都将保持未解析状态,即静态库文件将只包含代码的目标文件,而不包含运行时库的目标文件。
只有在使用该库构建实际可执行文件时,才链接到运行时库,该库将解析静态库中的打开引用。 这通常是编译静态链接库时的默认行为。
话虽如此,对于大多数编译器,您可以强制链接器解析已经为静态库的外部引用。如果您的库具有您不希望传递给最终可执行文件的编译的依赖项,这可能是有益的。
但是,如果这会导致重复符号,就像强制早期链接到运行时一样,可能会破坏链接器。如果你很幸运,你只会收到有关重复符号的警告,但它可能根本不会链接,具体取决于链接器的实现。