链接器是否防止重复链接
Does the linker prevent duplicated linkage?
经过一些研究和测试,我发现,当链接到库时,我的项目需要为运行库(MT、MD等)提供与我链接到的库相同的链接选项。
我想知道的是,如果我使用静态库(通常静态链接到运行库),我是否不会与运行库链接两次,因为它在我的库和应用程序中都是静态链接的?或者链接器阻止了这种情况?
通常静态库不会链接到运行库。相反,对运行库的所有引用都将保持未解析状态,即静态库文件将只包含代码的对象文件,而不包含运行库的对象文件。
只有当您使用该库构建实际的可执行文件时,才会链接到运行库,运行库将解析静态库中的打开引用。这通常是编译静态链接库时的默认行为。
也就是说,对于大多数编译器,您可以强制链接器解析静态库的外部引用。如果您的库具有不想传递给最终可执行文件编译的依赖项,那么这可能是有益的。
然而,如果这导致重复的符号,就像强制早期链接到运行时一样,可能会破坏链接器。如果幸运的话,你会收到一个关于重复符号的警告,但它可能根本不链接,这取决于链接器的实现。
相关文章:
- 有了gcc,是否可以链接库,但前提是它存在
- Windows 链接器是否使用 LoadLibrary 解析 DLL 中未定义的符号?
- 如果包含映射的静态库与可执行文件和动态库链接,静态映射(变量)是否会被多次释放?
- 是否可以在调用链接器时强制 CMake 重新排序参数?
- C++标准是否定义了结构中成员函数的函数内定义是否必须具有静态链接?
- lambda 的调用运算符是否需要具有链接?
- 是否应该链接带有实现的头文件?
- 我的 RichEdit 控件是否可以包含可单击的链接?
- 在这种情况下,GCC 和 clang 是否显示与 Visual Studio 相同的结果,关于语言链接?
- 在线C++标准草案的更新是否会使指向它的链接无效?
- 在链接的程序集文件中,我想从 c++ 调用代码访问变量.是否可以在不触发访问冲突的情况下执行此操作?
- 内联是否决定内部链接?
- 是否可以将同一组源数据与不同的表模型链接起来?
- 当用作模板参数时,功能指针是否需要指向具有外部链接的函数
- 链接时,"grab what you need" 和 "grab all" 之间是否有某些内容(-wl,--whole-archive)?
- qwebview,如何确定此链接是否为新窗口
- 将可执行的 gcc 与可执行的 gcc 与可视化C++库链接是否安全
- C++链接是否足够聪明,可以避免链接未使用的库
- C与c++的链接是否避免了在C中合法但在c++中不合法的未定义行为?
- 外部链接是否增加了链接/构建时间