有很多 C++ 库(大多数?)附带为每个 Visual C++ 版本(2003、2005、2008、2010)构建的特殊二进制文件。
将为 Visual C++ 2008 构建的 C++ 库链接到 Visual C++ 2010 会出现什么问题?
每个 Visual Studio 版本都带有更新的(不同的)版本的 C 和/或 C++ 运行时。 此 msdn 页面(位于:“存在什么问题...”)很好地解释了问题是什么。 msvcrt.dll 的描述内容 <-> msvcrt10.dll 对于每个 msvcrtXX.dll 都有效。
它不应该出现任何值得注意的问题,但建议使用适合 VS 版本的二进制版本。
常见的问题是使用不同版本的 Visual Studio 生成的代码使用不同版本的运行时库。
根据库的设计方式,这通常会导致问题,因为(例如)分配和释放函数有多个版本,并且当将一个运行时库中分配的指针传递给释放函数时,很容易出现堆错误来自另一位。无论运行时库是动态链接还是静态链接,都可能发生这种情况。
即使通过良好的库设计避免了这个问题,在同一个程序中拥有多个 C 堆仍然是低效的。
运行时库功能还存在其他潜在问题,这些功能依赖于静态保存的信息(例如
srand
和 rand
)、区域设置和丑陋的遗留函数(例如 strtok
)。
即使可以跨不同版本的 Visual Studio 进行链接,通常也不这样做会更安全。