【问题标题】:Are there issues loading multiple mscvrt**.dll versions?加载多个 mscvrt**.dll 版本是否存在问题?
【发布时间】:2010-06-22 09:49:07
【问题描述】:

我无法找到很多或任何关于此的信息。我有一个使用 VS2005 构建的项目,因此使用了 mscvr80.dll。我的项目还加载了第三方库,然后加载了 mscvrt60.dll。

现在我的程序中有一个奇怪的错误,程序因内存读取冲突而崩溃(在调试中它位于 0xcdcdcdcd,根据我的搜索描述了一个未初始化的内存位置)。调试器指示违规在第三方库中的未知函数内。

我已经联系了这个库的所有者,他们不知道有任何错误,如上所述。另外,我还有其他项目,在 VS60 中编译,使用这个第三方库,并且没有类似的错误。因此我想知道,使用多个通用运行时版本会不会有问题?我记得模糊地听说过一个运行时(比如在 .dll 中)可以分配内存的情况,然后如果另一个版本试图释放该内存,这可能会导致问题。但是,我不记得我在哪里读到的,也找不到关于这个主题的太多信息。

非常感谢任何意见。

【问题讨论】:

    标签: c++ visual-studio-2005


    【解决方案1】:

    在另一个版本中释放由一个版本的运行时分配的内存肯定会导致问题。不能保证 CRT 堆的实现细节在版本之间保持不变。如果您找不到任何其他解决方法,您可以尝试针对 mscvrt60.dll 编译您的应用程序。

    【讨论】:

    • 有没有一种简单的方法可以针对 v60 编译我的项目?没有真正尝试将解决方案降级到 Visual C++ 6.0?
    • 好吧,如果您安装了 VC6,您可以在链接器设置中选择“无默认库”选项。然后手动将其指向较旧的库。
    【解决方案2】:

    如果您看到 0xcdcdcdcd,那么您可能正在混合调试运行时库和发布运行时库。它们应该可以一起工作,但您可以尝试仅使用发布运行时复制问题。

    【讨论】:

    • 谢谢,但我检查了加载的库,它肯定是调试(调试时)和发布(发布时)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    相关资源
    最近更新 更多