应用程序无法正常启动、无法定位程序输入点 XX于动态链接库解决

应用程序无法正常启动、无法定位程序输入点 XX于动态链接库解决

环境

windows;visual studio2019;;c++开发;opencv;

问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

前言

最近在利用某红外相机做二次开发。利用厂商提供的SDk进行c++开发。
但在开发过程中,发现本地运行没问题,但是将exe移植到其他平台,会报错,出现应用程序无法正常启动、无法定位程序输入点 XX于动态链接库解决等问题,甚至出现点击exe程序时,跳出来几十个窗口 😂 😂 😂 😂 😂 😂
还发现 打包好的软件,在某些电脑上能运行,在某些电脑上不能运行。为此找了很多同学、师兄的电脑,尝试了很多方法,包括替换dll;将c盘的dll复制到exe所在目录下;怀疑VS的环境;c++的环境等等。但是仍不能解决问题。
甚至差点把某些同学的电脑干崩溃了。

尝试过的方法

安装c++的环境

一开始怀疑目标电脑上没有安装c++的环境,所以找到了对应版本的c++运行库,发现还能不解决问题

直接替换dll

根据网上查找的资料,很多都说应该是dll的版本不匹配,所以利用Dependency Walker 查找软件的依赖,但是发现都是没什么问题,但是还是将软件依赖的所以dll 复制到exe所在的目录,但是还是发现部分电脑不能运行,甚至某些电脑弹出来几十个弹窗 😂 😂 😂 😂 😂 😂。(某同学的电脑差点被我干崩了)

静态链接

在网上搜索解决方案,比如 :VS2019 生成的exe文件在其他环境下运行失败的问题等。他们给出的方案是静态链接。
例如:
这通常是由于我们的IDE选择了动态编译所致。该方法生成的可执行文件比较轻省,需要的一些东西要从计算机中存在的dll库,如果运行的计算机中不存在所需的库,就会出现如上的情况。解决的方法是在VS2019中打开项目 改成 ** 动态编译生程程序**

debug与release的修改

部分解决方案 给出的方案是将debug更改为release。但是这其实与上面的静态链接没什么区别。而且还是不能解决问题。

将程序打包生成安装文件

这样的话,其实能解决很多问题,程序所依赖的dll基本上都会被链接进去,不用考虑环境的问题。
但是打包生成安装程序后,还是不能解决问题,会出现部分的电脑正常运行,部分电脑能运行的问题。

解决方法

通过查找资料,很多都提到了一个核心的问题,就是dll的版本不匹配的问题。但是上面的很多方法都都忽略了一个系统的dll的版本问题。如果将开发所使用的电脑c盘windows、system32下面的dll复制到exe所在的目录, 再移植到其他电脑,会出现dll版本与系统本身不匹配。
😊 😊 😊😊 😊 😊 😊 😊 😊 😊 😊 😊

最后经过某大佬的提醒,会不会是windows系统的版本不一样,这才恍然大悟,发现是visual studio 所使用的windows系统的SDK版本太高了,导致只有新版本的系统才能正常运行

具体解决步骤

1、右击项目

在这里插入图片描述

2、选择属性

在这里插入图片描述

3、 找到常规 、windows SDK ,选择合适的版本,注意不要太高,系统都是向下兼容,所以老版本的sdk大部分电脑能运行

在这里插入图片描述

4、右击项目,选择重新生成解决方案

在这里插入图片描述

5、右击 打包的setup项目,选择重新生成解决方案

在这里插入图片描述

6、 由于打包后的软件不会将自己一些自己开发的第三方库包含进去,所以将项目包含的一些第三方库 复制到程序安装的目录下
6.1 找到项目所需要的dll,如下图是需要的一些第三方dll,(注意在VC++牡蛎里面包含库的路径)

在这里插入图片描述

6.2 找到所需要的dll,如下图是编译好的第三方dll(厂家提供的SDK)需要的dll

如果所需要安装的电脑没有安装Visual studio 软件,即没有相应的运行库的话,则需要将在c盘 windows\system32 下面找到ms的动态库: VCRUNTIME140D.dll;MSVCP140D.dll;VCRUNTIME140 1D.dll;ucrtbased.dll(应该是四个,如果程序还显示缺少其他的dll,则也需要将其复制到安装目录下)
在这里插入图片描述
如果没有安装对应版本的VS,即系统里面没有 VCRUNTIME140D.d;MSVCP140D.dll;VCRUNTIME140_1D.d;ucrtbased.dll(不区分大小写,在c盘下面应该都是小写字母,如msvcp140d),则会显示如下的错误
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果不包含第三方库,如本项目所使用的 libirtemp.dll等动态库则会显示如下的错误
在这里插入图片描述

6.3 将该所有的dll打包,和打包生成安装文件放在一起,如图

在这里插入图片描述

6.4 将其打包成压缩包,发给目标电脑
6.5 在目标电脑上点击setup.exe,按照引导程序,安装程序

在这里插入图片描述

6.6 将上图dll文件夹下面所有的dll文件复制到安装目录下

在这里插入图片描述
上述加dll的步骤,是因为本人一开始使用动态链接,如果采用静态链接,则不需要这么麻烦,直接将VS生成的setup.exe发给目标电脑,直接安装即可运行

😊

上述加dll的步骤,是因为本人一开始使用动态链接,如果采用静态链接,则不需要这么麻烦。不需要将VCRUNTIME140D.d;MSVCP140D.dll;VCRUNTIME140_1D.d;ucrtbased.dll等复制到安装目录,但是 第三方的dll仍需添加(试过静态链接)。将VS生成的setup.exe发给目标电脑,直接安装即可运行
在这里插入图片描述

注意事项

在安装程序的时候,最好不要拿其他人的电脑直接试,因为如果程序存在问题,电脑崩了就寄了。比如我,拿师兄、同学的电脑试,最后差点被大家拉黑 😂。万一出现问题,重新安装各种软件,配置各种环境更令人头疼。为了安全起见,可以安装windows虚拟机,在虚拟机上试,万一崩了,删掉,重新搞一个就行。当然也可以采用服务器,因为本人电脑已经装了两个linux系统的虚拟机,导致内存紧张,所有白嫖了一个阿里云的服务器,最后才解决问题

  • 19
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在追逐路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值