为什么我需要为每个 Visual C++ 版本构建特殊的库(二进制文件)?

问题描述 投票:0回答:2

有很多 C++ 库(大多数?)附带为每个 Visual C++ 版本(2003、2005、2008、2010)构建的特殊二进制文件。

将为 Visual C++ 2008 构建的 C++ 库链接到 Visual C++ 2010 会出现什么问题?

c++ visual-c++ binary linker
2个回答
2
投票

每个 Visual Studio 版本都带有更新的(不同的)版本的 C 和/或 C++ 运行时。 此 msdn 页面(位于:“存在什么问题...”)很好地解释了问题是什么。 msvcrt.dll 的描述内容 <-> msvcrt10.dll 对于每个 msvcrtXX.dll 都有效。

它不应该出现任何值得注意的问题,但建议使用适合 VS 版本的二进制版本。


2
投票

常见的问题是使用不同版本的 Visual Studio 生成的代码使用不同版本的运行时库。

根据库的设计方式,这通常会导致问题,因为(例如)分配和释放函数有多个版本,并且当将一个运行时库中分配的指针传递给释放函数时,很容易出现堆错误来自另一位。无论运行时库是动态链接还是静态链接,都可能发生这种情况。

即使通过良好的库设计避免了这个问题,在同一个程序中拥有多个 C 堆仍然是低效的。

运行时库功能还存在其他潜在问题,这些功能依赖于静态保存的信息(例如

srand
rand
)、区域设置和丑陋的遗留函数(例如
strtok
)。

即使可以跨不同版本的 Visual Studio 进行链接,通常也不这样做会更安全。

© www.soinside.com 2019 - 2024. All rights reserved.