我正在使用Visual Studio 2015,并尝试在发布模式x86中编译C ++代码。我的操作系统是Windows 10,64位操作系统和基于x64的处理器。
构建之后,如果我从笔记本电脑运行.exe文件,它的工作原理非常好。但是,如果我将Release文件夹中的所有内容传输到另一台计算机(Windows 8) - 没有Visual Studio - 以及两个DLL文件(pthreadVC2.dll和ucrtbased.dll),它会给我错误0xc000007b:应用程序无法启动。
我已尝试静态链接这些库,但这并没有帮助。如果我运行Dependency Walker,它会说文件 - 在我的计算机上 - 有错误,并提供错误的记录,这是我无法理解的:
错误:由于缺少,至少有一个模块具有未解析的导入 隐式依赖模块中的导出函数。 错误:找到了具有不同CPU类型的模块。 警告:找不到至少一个延迟加载依赖模块。
我浏览了这个网站,显然这意味着正在加载64位DLL,我应该从Path
更改它。我怎么做?为什么它不能在具有相同处理器的另一台计算机上运行?我为Visual Studio 2015安装了Visual C ++ Redistributable,但没有做任何事情。
另一个问题:代码使用了许多外部标头。我是否还必须将它们导出到另一台机器上? Aren他们编译为LIB文件吗?
对不起,如果我听起来一无所知,但我很少使用Visual Studio编写应用程序。谢谢你的帮助!
答案 0 :(得分:1)
该错误代码是NTSTATUS
代码,具体为STATUS_INVALID_IMAGE_FORMAT
。这通常意味着加载器正在寻找64位模块而不是32位模块。究竟哪些模块是错误的位数我们很难说。在Dependency Walker的配置文件模式下运行启动将显示所有。
您确实需要清楚地了解程序的依赖关系。您具有与您的程序相关的特定依赖项,这些依赖项超出了正常的MSVC运行时依赖项。只有你可以知道你的依赖是什么。像Dependency Walker这样的工具可以帮助您理解它们,但要确保您的理解是可靠的。尽量不要使用反复试验来解决此问题。