VC8.0编译的程序出现The application failed to initialize properly (0xc0000005)

本文介绍了解决VC8.0编译的应用在英文版系统中出现初始化错误的具体步骤。通过调整manifest文件配置及正确部署所需DLL文件,最终成功解决了问题。
部署运行你感兴趣的模型镜像

最近开发了一个系统,在简体中文和繁体中文下都可以正常运行,但是到了英文版本下一打开会出现The application failed to initialize

 

properly (0xc0000005)这个错误,可能是因为英文版本的系统太低了,还没有更新所导致的,因为我尝试把源码用VC6.0编译的不会出

 

现这个错误,但是用VC8.0编译以后拿过去测试还是会错,于是我开始寻找解决方法,终于解决了。下面是我解决的方法。

 

在VC6中,Release版本的程序的部署,除了程序自身关联的各个Dll之外,只需添加MFC42.dll即可。

 

但是在VC8.0中,发生的变化包括:

 

1.MFC的版本发生变化,最新的版本为8.0,所有应该包括MFC80.dll

 

2.在VC2005的架构下,采用manifest进行dll的版本确认,因此需要添加MFC程序所需的manifest文件。

 

在VC2005的安装目录下:C:/Program Files/Microsoft Visual Studio 8/VC/下有一个文件夹为redist专用于

 

程序的部署和发布。在其中的x86文件夹用于Release版本的程序发布,其中的Microsoft.VC80.MFC文件夹用于发布MFC程序,包括混合

 

有Unicode以及CLR的程序,可以根据程序需要选择copy。对于我个人的单纯MFC的程序,只需要复制Microsoft.VC80.MFC.manifest

 

和mfc80.dll即可。其余几个,文件名称中带有“u”的表示兼容unicode编码,带有“m”表示使用托管代码生成规则。

 

还有另一个解决的办法:manifest文件(这个是我的应用的解决方法)

 

     在VC2005的开发环境下,选择项目属性-->清单工具-->输入和输出,在潜入清单位置,选择“否”,这样VC2005将会直接在

 

Release目录下,exe文件的旁边为您生成一个同名的manifest文件,文件内容和Microsoft.VC80.MFC.manifest有关联。直接复制这个

 

文件也可以起到效果。对不太熟练的开发人员,可以直接将这些dll统统复制到自己的exe文件所在目录下,应该可以确保万无一失,只不过

 

有的文件没有被利用而已。最简单的程序发布方法莫过于直接复制文件,对依赖的dll文件,可以直接和exe文件放在同一个文件夹下,而不

 

将其复制到系统文件夹下。  

隔天测试机上又可以用原来的程序了,我发现测试机上的更新是自动开启的,我觉得是自动更新了,所以还是要把这个方法记录下来,分享

 

给大家!

您可能感兴趣的与本文相关的镜像

Linly-Talker

Linly-Talker

AI应用

Linly-Talker是一款创新的数字人对话系统,它融合了最新的人工智能技术,包括大型语言模型(LLM)、自动语音识别(ASR)、文本到语音转换(TTS)和语音克隆技术

在遇到“Failed to initialize NVML: N/A”错误时,通常与NVIDIA驱动程序、NVML库或系统环境的配置有关。以下是可能导致该问题的常见原因及相应的解决方案: ### 1. NVIDIA驱动未正确安装或版本不兼容 NVML(NVIDIA Management Library)依赖于NVIDIA驱动程序。如果驱动未安装、安装不完整或版本过低,可能导致NVML初始化失败。建议执行以下步骤: - 使用`nvidia-smi`命令检查驱动是否正常加载。如果命令未找到或输出异常,说明驱动未正确安装。 - 访问[NVIDIA官网](https://www.nvidia.com/Download/index.aspx)下载并安装适用于当前GPU型号的最新驱动。 - 确保驱动版本与CUDA工具包版本兼容,可通过[NVIDIA官方兼容性文档](https://docs.nvidia.com/deeplearning/cuda/installation-guide-linux/index.html)进行核对。 ### 2. NVML库缺失或路径配置错误 NVML库(`libnvidia-ml.so`)是NVIDIA驱动安装的一部分。若系统中缺少该库或其路径未被正确设置,也可能导致初始化失败。解决方法包括: - 检查`/usr/lib`或`/usr/local/cuda/lib64`目录下是否存在`libnvidia-ml.so`文件。若不存在,可能需要重新安装驱动。 - 确保环境变量`LD_LIBRARY_PATH`包含NVML库所在的路径。例如,执行`export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH`。 ### 3. 权限问题或守护进程未运行 某些情况下,用户权限不足或NVIDIA相关的守护进程未启动也可能导致NVML初始化失败。可尝试以下操作: - 使用`sudo`执行相关命令,确保当前用户具有足够的权限访问GPU资源。 - 检查NVIDIA持久模式是否启用,使用`nvidia-smi -pm 1`命令开启持久模式。 - 确认`nvidia-persistenced`服务是否正在运行,必要时重启该服务:`sudo systemctl restart nvidia-persistenced`。 ### 4. 系统重启后驱动未加载 在系统重启后,NVIDIA驱动可能未自动加载,导致NVML初始化失败。检查驱动模块是否加载: - 使用`lsmod | grep nvidia`查看驱动模块是否已加载。若未加载,尝试手动加载:`sudo modprobe nvidia`。 - 若驱动模块加载失败,可能需要检查内核版本是否与驱动兼容,或重新安装驱动。 ### 5. 使用容器环境时的配置问题 如果在Docker或其他容器环境中遇到该问题,需确保容器内正确配置了NVIDIA驱动和NVML库: - 安装[NVIDIA Container Toolkit](https://github.com/NVIDIA/nvidia-docker),确保容器能够访问GPU资源。 - 在运行容器时添加`--gpus all`参数,例如:`docker run --gpus all nvidia/cuda:11.0.3-base nvidia-smi`。 ### 示例代码:检查NVML初始化状态 以下是一个简单的C语言示例,用于检查NVML是否能够正确初始化: ```c #include <stdio.h> #include <nvml.h> int main() { nvmlReturn_t result = nvmlInit(); if (result != NVML_SUCCESS) { printf("Failed to initialize NVML: %s\n", nvmlErrorString(result)); return 1; } printf("NVML initialized successfully.\n"); nvmlShutdown(); return 0; } ``` 编译并运行上述代码时,若输出“Failed to initialize NVML”,则说明存在驱动、库或环境配置问题,需根据上述解决方案逐一排查。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值