即使安装了可重新分发的VC ++ 2017,也无法启动具有动态链接VC ++的Windows 10应用程序

时间:2018-12-06 12:10:57

标签: c++ visual-c++

我们目前正在对Windows应用程序进行Beta测试,该应用程序是使用最新的C ++ Visual Studio构建的,并且可以在Windows 10上运行。该应用程序动态链接VC ++库(对于我们来说,静态链接不是一个选择)。

在我们测试人员的75%的计算机(包括我们所有的dev计算机)上,该应用程序在安装后即开即用,但在加载动态系统库的过程中,其他一些应用程序却无法启动并失败(大概) (因为它不会像运行时错误一样触发任何会写入minidump的异常)。

  1. 其中一些用户遇到了有关缺少运行时dll的错误,这些错误在安装最新的VC ++ 2017可再发行组件后已得到解决,但是该应用程序仍然无法运行。
  2. 一个用户还使用“依赖关系”工具(https://github.com/lucasg/Dependencies)检查了库的依赖关系,但是他的结果显示了一点奇怪-在工作的计算机上和自己的输出之间没有明显的区别。某些UCRT依赖项旁边有几个问号(请参见屏幕快照:missing modules as shown in Dependencies),但它们也在工作计算机上,所以我认为它们是误报。
  3. 我还尝试将相关的40多种UCRT和VC ++ dll部署为可执行文件旁边的应用本地部署,但是它仍然无法在受影响的机器上打开(我可能错过了一些相关的机器,或者仍然从System32文件夹引用)

如果我们无法在本地重现该问题(在两个全新安装了Windows 10且没有构建环境的全新设备上,它是开箱即用的),您将如何调试该问题,并且< strong>关于库调用可能出什么问题的信息很少?

1 个答案:

答案 0 :(得分:1)

c000001d是非法的指令异常代码。

要么您要针对客户CPU不支持的指令集(例如AVX2或SSE4.1),要么可执行文件已损坏(例如,以文本模式而不是二进制模式下载)。

为了获得最佳的可移植性,在使用VC ++进行编译时,请不要指定/arch:AVX/arch:AVX2。然后,编译器将针对给定体系结构(带有SSE2的x86或x86_64)上可用的基本指令集。