2010-08-26 47 views
3

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

实施例:

如果我有一个可执行:A.exe时,它基本上包裹并取决于 静态库A.LIB

两个A.exe时和A.LIB需要另一个库乙的.lib

如果我有这样的情况:

的A.LIB库包括B.LIB版本1(使用从 头文件这个库) 的A.exe时可执行文件包括B.lib版本2 对B.lib版本2的A.exe可执行文件链接

在什么情况下会产生问题?

感谢

回答

2

如果两个B1.Lib和B2.Lib两者都与A.EXE你可以用一个问题结束了存在相同的功能。基本上,如果B1 :: fn将不同的结果返回给B2 :: fn,并且A.Lib依赖于B1结果并且A.exe依赖于B2结果,那么您将遇到一个主要问题。链接器将链接到它找到的第一个实现,并且不能100%确定它将在B1或B2中。

实际上,它更安全地重写A.lib以使用B2.lib。如果名称空间不及你的朋友...

+0

A.exe只是链接到较新版本的lib。它根本不使用较旧的那个。 – ssm 2010-08-26 08:57:05

+1

然后你误解了链接的工作方式。您不链接“.lib”文件。您只能链接动态库或可执行文件。当您在可执行文件上运行链接阶段时,它会尝试将所有内容链接在一起,而且您有2个实现相同功能的库意味着您最终会将错误的函数链接到一个地方或另一个地方。 .. – Goz 2010-08-27 10:07:41