C++ Windows 10未加载版本可执行文件的DLL

C++ Windows 10未加载版本可执行文件的DLL,c++,visual-studio,dll,visual-studio-2008,C++,Visual Studio,Dll,Visual Studio 2008,环境: Windows 10 x64 Visual Studio 2008(是的,我知道) 试图使用GStruter 1构建一个非常简单的X64 C++应用程序。管道在调试模式(甚至将图像写入磁盘)下工作正常,但只要调用任何gstreamer函数,程序就会在release模式下崩溃。我收集了发布版本的以下证据: VisualStudio中的调试显示,所需的gstreamer/gthread库未在模块选项卡中加载 通过移动/重命名包含目录(C:/gstreamer/x64_86/bin)来断开g

环境:

Windows 10 x64

Visual Studio 2008(是的,我知道)

试图使用GStruter 1构建一个非常简单的X64 C++应用程序。管道在调试模式(甚至将图像写入磁盘)下工作正常,但只要调用任何gstreamer函数,程序就会在release模式下崩溃。我收集了发布版本的以下证据:

  • VisualStudio中的调试显示,所需的gstreamer/gthread库未在模块选项卡中加载
  • 通过移动/重命名包含目录(C:/gstreamer/x64_86/bin)来断开gstreamer/gthread库的路径在发布模式下无效。如果我在调试模式下尝试此操作,那么应用程序会在运行时抱怨找不到所需的DLL
  • 在发布程序上运行dumpbin/dependents表明存在对gstreamer/gthread的依赖。调试版本也是如此
  • 从命令行而不是VS运行应用程序会产生相同的结果(崩溃)

我注意到Win10更智能,如果在运行时丢失多个DLL(而不仅仅是第一个DLL),它会向您发出警告,但在这里,我很困惑,为什么它甚至不加载DLL,也不警告我它们丢失了。我还可以使用什么来调试此问题?

过去导致我出现此问题的原因:

  • 在多项目解决方案中,所有项目生成设置都不会同步。换句话说,如果我以64位版本配置生成解决方案,configuration Manager是否会显示以该模式生成的所有项目,或者其中一些项目被遗漏/或具有错误的生成设置

  • 由于某种原因,32位版本的DLL仍然存在。如果生成发生在非默认目录中,这种情况尤其可能发生。在这种情况下,只需丢弃构建目录并重新构建即可


  • 事实证明,这是一个非常棘手的GStreamer特定问题,它与C运行时库有关。我的同事更仔细地检查了一下,发现GStreamer使用的是Windows设备驱动程序工具包7.1.0版中“无处不在”的CRT,而不是Visual Studio附带的常规CRT。我们的第一个错误是试图在VS2008中使用VS2010构建的GStreamer库。第二个错误是CRT LIB的无意混搭


    我们试图忽略需要使用道具文件的构建说明,因为它们是针对VS2010的,我们仍在处理2008。这是错误的-道具文件指示Visual Studio使用DDK中的CRT-必须单独安装。安装文档的第二部分详细提到了这一点。仍然不太清楚为什么会在调试模式下工作。

    您可以尝试使用Process Monitor查看流程正在查找什么,以及在哪里查找。