Windows 10没有为可执行文件

时间:2016-06-06 16:53:56

标签: c++ visual-studio dll visual-studio-2008

环境:

Windows 10 x64

Visual Studio 2008(是的,我知道)

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

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

我注意到Win10更聪明,如果在运行时(而不仅仅是第一个)丢失了多个DLL,它会发出警告但是在这里我很困惑为什么它甚至没有加载它们而没有警告我他们'再次失踪。我还可以用什么来调试这个问题?

2 个答案:

答案 0 :(得分:1)

过去导致这种情况发生在我身上的事情:

  1. 在多项目解决方案中,并未同步所有项目构建设置。换句话说,如果我使用64位版本配置构建解决方案,那么Configuration Manager显示在该模式下构建的所有项目,还是其中一些项目被遗漏/或者构建设置错误?

  2. 由于某种原因,DLL的32位版本仍然存在。如果构建发生在非默认目录中,则尤其会发生这种情况。在这种情况下,只需删除构建目录并重建。

答案 1 :(得分:0)

原来这是一个非常棘手的GStreamer特有的问题,它与C-Run Time lib有关。我的同事对GStreamer installation docs进行了更仔细的检查,结果发现GStreamer正在使用"无处不在的" Windows设备驱动程序工具包版本7.1.0中的CRT,而不是Visual Studio附带的常规CRT。我们的第一个错误是尝试在VS2008中使用VS2010构建的GStreamer库。第二个错误是无意中混合和CRT libs的匹配。

我们试图忽略需要使用道具文件的构建指令,因为它们是针对VS2010而我们仍在处理2008.这是错误的 - 道具文件指示Visual Studio使用CRT来自DDK - 必须单独安装。 The following section安装文档详细提到了这一点。仍然不太确定为什么这在调试模式下有效。

相关问题