【问题标题】:Why do I need special libraries (binaries) built for each Visual C++ version?为什么我需要为每个 Visual C++ 版本构建的特殊库(二进制文件)?
【发布时间】: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


    【解决方案1】:

    每个 Visual Studio 版本都带有 C 和/或 C++ 运行时的更新(和不同)版本。 This msdn page(在:“存在什么问题......”)很好地解释了问题所在。那里对 msvcrt.dll msvcrt10.dll 的描述对每个 msvcrtXX.dll 都有效。

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

    【讨论】:

      【解决方案2】:

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

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

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

      依赖于静态保存的信息(例如srandrand)的运行时库功能还有其他潜在问题,语言环境和丑陋的旧函数(例如strtok)。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-14
        • 2011-04-14
        • 1970-01-01
        相关资源
        最近更新 更多