【发布时间】:2010-08-21 09:30:34
【问题描述】:
有很多 C++ 库(大多数?)都带有为每个 Visual C++ 版本(2003、2005、2008、2010)构建的特殊二进制文件。
将针对 Visual C++ 2008 构建的 C++ 库与 Visual C++ 2010 链接有什么问题?
【问题讨论】:
标签: c++ visual-c++ compiler-construction binary linker
有很多 C++ 库(大多数?)都带有为每个 Visual C++ 版本(2003、2005、2008、2010)构建的特殊二进制文件。
将针对 Visual C++ 2008 构建的 C++ 库与 Visual C++ 2010 链接有什么问题?
【问题讨论】:
标签: c++ visual-c++ compiler-construction binary linker
每个 Visual Studio 版本都带有 C 和/或 C++ 运行时的更新(和不同)版本。 This msdn page(在:“存在什么问题......”)很好地解释了问题所在。那里对 msvcrt.dll msvcrt10.dll 的描述对每个 msvcrtXX.dll 都有效。
它应该不会出现任何值得注意的问题,但建议使用适用于 VS 版本的二进制版本。
【讨论】:
通常的问题是使用不同版本的 Visual Studio 生成的代码使用不同版本的运行时库。
根据库的设计方式,这通常会导致问题,因为(例如)分配和释放函数有多个版本,并且当一个运行时库中分配的指针传递给来自不同的释放函数。无论运行时库是动态链接还是静态链接,都可能发生这种情况。
即使通过良好的库设计避免了这个问题,在同一个程序中拥有多个 C 堆仍然是低效的。
依赖于静态保存的信息(例如srand 和rand)的运行时库功能还有其他潜在问题,语言环境和丑陋的旧函数(例如strtok)。
即使可以跨不同版本的 Visual Studio 进行链接,通常也不这样做会更安全。
【讨论】: