c++ - 关于链接和包含不同版本库的问题

标签 c++ static-linking

如果我有一个可执行文件和一个库使用不同的,这是一个问题吗? 另一个库的版本。

示例:

如果我有一个可执行文件:A.exe,它基本上包装并依赖于 一个静态库 A.lib

A.exe和A.lib都需要另一个库B.lib

如果我遇到这样的情况:

A.lib 库包括 B.lib 版本 1(使用来自 这个库) A.exe 可执行文件包括 B.lib 版本 2 A.exe 可执行文件链接到 B.lib 版本 2

在什么情况下会出现问题?

谢谢

最佳答案

如果 B1.Lib 和 B2.Lib 中存在相同的函数,并且都链接到 A.exe,您可能会遇到问题。基本上,如果 B1::fn 向 B2::fn 返回不同的结果,并且 A.Lib 依赖于 B1 结果,而 A.exe 依赖于 B2 结果,那么您就会遇到重大问题。链接器只会链接到它找到的第一个实现,您不能 100% 确定它会在 B1 或 B2 中。

实际上,重写 A.lib 以使用 B2.lib 更为安全。命名空间是你的 friend 失败了......

关于c++ - 关于链接和包含不同版本库的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3573314/

相关文章:

javascript - SpiderMonkey 对比 JavaScriptCore 对比?

c++ - C++中数字的逗号格式

haskell - ghc中的字节串链接

c++ - 将库添加到 MFC 项目

rust - 如何在 Rust 中指定链接器路径?

c++ - 这个智能指针使用有什么问题?

C++ 异步运行一个函数而不阻塞用户界面

c++ - Visual Studio 2013 (vs120) 要求错误的 boost 库

c++ - QT 5.7 MSVC 2015 静态构建不工作

ruby - 编译 Ruby C 扩展时如何静态链接外部库