c++ - 多个 CRT 出现段错误

标签 c++ visual-studio-2010 dll

背景:我正在为一个大型模拟框架构建一个插件。我正在使用 Visual Studio C++ 2010 编译 DLL。

经过多次查找错误和谷歌搜索后,我相信我遇到了一个问题,该问题源于将多个版本的 CRT 链接到我的 DLL。我在 tidtable.c(来自 msvcr100.dll)的函数 _CRTIMP PFLS_GETVALUE_FUNCTION __cdecl __set_flsgetvalue() 中遇到段错误。读书this线程(讨论了多个问题,但最后提到了这个函数)是我的想法,如果我检查我项目的链接部分,我会看到 msvcr90.dll,´msvcp100d。 dllmsvcr100d.dll`。

我正在使用几个外部库,并且我已经能够使用 VS2010 重新编译除其中一个之外的所有库。然而,最后一个不是开源的(它是一个属于框架的库),我想这就是依赖性的来源。但是我不确定,我该如何检查?

鉴于我对依赖性的来源是正确的,我该怎么办?

最佳答案

您正在链接到 Visual Studio 2008 的发布运行时和 Visual Studio 2010 的调试运行时……您通常不应混合搭配发布和调试。如果您需要调试 VC9,则需要安装 Visual Studio 2008(为安全起见,请在 2010 年之前安装)

不过,我可能只是针对 VC10 重建所有项目和依赖项。您也许可以安装 redist for VC9如果您的系统中缺少它,仅供发布。

编辑:链接到Dependency Walker这对于确定缺失或冲突的依赖关系非常宝贵。

关于c++ - 多个 CRT 出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6412706/

相关文章:

c++ - this->field 和 Class::field 之间的区别?

c++ - 将抽象类(所有虚拟的,因此接口(interface))传递到另一个类的构造函数中并具有默认值

c++ - 如何在另一个窗口中获取组合框的 HWND?

c++ - Visual Studio + CMake 的 GLOB_RECURSE

c++ - 如何在udp c++​​中发送和接收大量数据

c# - 如何在 C# 中管理多个版本的非托管 DLL 调用的使用?

java - 如何在 Mac OS X 中使用带有 Java 的 Windows DLL?

c++ - 透视投影——如何转换坐标

visual-studio-2010 - 如何从 Visual Studio 生成后事件启动后台任务?

dll - 哪里可以下载 Microsoft Visual c++ 2003 可再发行组件