Windows 应用不能正常启动 (The application was unable to start correctly (0xc000007b))

本文讲述了遇到Windows应用因DLL版本不匹配导致启动失败(0xc000007b)的问题,解决方法包括确认32-bit和64-bitDLL的正确放置位置,以及在Stackoverflow上的相关参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

小结

最近碰到了Windows应用不能正常启动 (The application was unable to start correctly (0xc000007b))的问题,进行了解决。

问题及解决

点击应用后,应用直接不能启动,返回(The application was unable to start correctly (0xc000007b))的对话框。

这里的主要原因是因为应用使用的DLL的版本不对,如下:

  • If a 32-bit app tried to load a 64-bit DLL.
  • Or if a 64-bit app tried to load a 32-bit DLL.
  • Or if a 64-bit app tried to run on a 32-bit Windows.

实际是DLL的32-bit和6-4bit版本不对,

  • 尝试使用32-bit应用加载64-bit的DLL
  • 或者是使用64-bit应用加载32-bit的DLL
  • 或者是在32-bit Windows操作系统中打开64-bit应用。

这里涉及到这几个DLL: msvcp140d.dll,ucrtbased.dll,vcruntime140d.dll,都是debug版本,需要将32-bit DLLs放在’/Windows/SysWOW64’ 目录下,将64-bit DLLs 放在 ‘/Windows/System32’ 目录中,如果不行,再反过来放一次。

参考

Stackoverflow: The application was unable to start correctly (0xc000007b)

### 解决方案 当遇到 `mpirun` 无法启动应用程序的问题时,可能的原因包括但不限于权限不足、路径错误或环境配置不正确等问题。以下是针对该问题的具体分析和解决方案: #### 权限与路径验证 确保目标可执行文件具有正确的权限设置,并且其路径已被正确定义。可以通过以下命令检查文件是否存在以及是否有足够的权限来运行它: ```bash ls -l /path/to/executable chmod +x /path/to/executable ``` 如果上述操作未解决问题,则需进一步确认是否因 `fork()` 和 OpenFabrics Enterprise Distribution (OFED) 的已知问题所引起[^1]。 #### 配置调整建议 为了规避由 `fork()` 及 OFED 带来的潜在冲突,可以采取如下措施之一: - **升级软件版本**:在 XC V3.2.1 或更高版本上运行程序,因为这些版本已经修复了所有关于 OFED 中 `fork()` 函数的相关缺陷。 - **更新内核版本**:切换到支持更稳定特性的操作系统内核(例如 2.6.18 或以上),从而减少兼容性风险。 - **更换驱动类型**:尝试使用非 OFED 类型的 InfiniBand 驱动器代替当前使用的驱动器;不过需要注意的是,在某些特定硬件组合下(如配备 ConnectX InfiniBand 主机通道适配器的情况),此选项不可行,仍需依赖于 OFED 提供的支持功能。 - **修改 MPI_REMSH 参数**:通过设定变量 `MPI_REMSH` 到本地可用指令的方式绕过原有错误提示信息。然而实际应用过程中可能会遭遇诸如找不到指定目录下的 `<command>` 文件之类的状况,这表明需要重新审视并修正相应脚本或者工具链安装位置是否准确无误。 #### 脚本调试实例 下面给出一段简单的测试代码用于排查此类故障现象的发生原因: ```python import os from subprocess import run, PIPE def check_executable(path_to_exe): result = run(['which', path_to_exe], stdout=PIPE, stderr=PIPE) if result.returncode != 0: print(f"{path_to_exe} not found.") else: try: permissions = oct(os.stat(path_to_exe).st_mode)[-3:] if '7' in str(permissions): print(f"{path_to_exe} exists and has execution permission ({permissions}).") else: raise PermissionError('No Execution Permissions') except Exception as e: print(e) check_executable("/usr/bin/your_app") # 替换为您的真实二进制名称 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值