C++ Windows 10未加载版本可执行文件的DLL
环境: Windows 10 x64 Visual Studio 2008(是的,我知道)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
试图使用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,也不警告我它们丢失了。我还可以使用什么来调试此问题?过去导致我出现此问题的原因:
事实证明,这是一个非常棘手的GStreamer特定问题,它与C运行时库有关。我的同事更仔细地检查了一下,发现GStreamer使用的是Windows设备驱动程序工具包7.1.0版中“无处不在”的CRT,而不是Visual Studio附带的常规CRT。我们的第一个错误是试图在VS2008中使用VS2010构建的GStreamer库。第二个错误是CRT LIB的无意混搭
我们试图忽略需要使用道具文件的构建说明,因为它们是针对VS2010的,我们仍在处理2008。这是错误的-道具文件指示Visual Studio使用DDK中的CRT-必须单独安装。安装文档的第二部分详细提到了这一点。仍然不太清楚为什么会在调试模式下工作。您可以尝试使用Process Monitor查看流程正在查找什么,以及在哪里查找。