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

发布于 2024-09-15 22:09:21 字数 292 浏览 3 评论 0原文

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

示例:

如果我有一个可执行文件: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

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

谢谢

Is it a problem if I have an executable and a library use different
versions of another library.

Example:

If I have an executable: A.exe, and it basically wraps and depends on
a static library A.lib

Both A.exe and A.lib need another library B.lib

If I have a situation like this:

The A.lib library includes B.lib version 1 (uses header files from
this library)
The A.exe executable includes B.lib version 2
The A.exe executable links against B.lib version 2

Under what conditions would this be problematic?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

束缚m 2024-09-22 22:09:21

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

实际上,重写 A.lib 以使用 B2.lib 更安全。如果失败了,命名空间就是你的朋友......

If the same functions exist in both B1.Lib and B2.Lib and both are linked to A.exe you may end up with a problem. Basically if B1::fn returns different results to B2::fn and A.Lib relies on the B1 results and A.exe relies on the B2 results you have a MAJOR problem. The linker will just link to the first implementation it finds and you can't be 100% sure that will be in B1 or B2.

Realistically its far safer to re-write A.lib to use B2.lib. Failing that namespaces are your friend ...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文