多个CRT给出segfault

Multiple CRTs giving segfault

本文关键字:segfault 给出 CRT 多个      更新时间:2023-10-16

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

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

我使用了几个外部库,并且能够使用VS2010重新编译除一个外的所有库。然而,最后一个不是开源的(它是属于框架的库),我想这就是依赖关系的来源。但是我不确定,我该怎么检查呢?

既然我对依赖的来源是正确的,我该怎么办?

您正在链接到Visual Studio 2008的发布运行时和Visual Studio 2010的调试运行时。。。一般情况下,您不应该混合使用发布和调试。如果你需要调试VC9,你需要安装Visual Studio 2008(为了安全起见,在2010年之前安装)

然而,我可能只是针对VC10重新构建所有项目和依赖关系。如果您的系统中缺少仅用于发布的redist,则可以安装用于VC9的redist。

编辑:链接到依赖项Walker,它对于确定缺失或冲突的依赖项非常宝贵。