1、运行、调试时出现程序启动时报错,提示出现错误无法启动。
2、程序执行数据库查询语句时直接跳过,查询函数调用时断点也无法中断。并且无执行结果。
其实出现这样的原因最主要是我们部署的程序缺少一些必要的运行库(注意库的版本,同样的库如果版本不一致也可能出现题)。
本文就是通过Depend工具来分析程序所需的依赖库。Depend工具包含X86和X64两个版本,用户可以根据实际情况进行选择使用对应的版本。笔试在写这篇文章时使用的 *** 作系统时win7,在选择Depend工具版本时选择的是depends22_x64。
1、打开depends22_x64文件夹,如下图:
2、运行depends.exe工具,如下图:
3、本文选择进行HyExchangeManager.exe分析,如下图:
有图分析可以知道运行该程序锁需要依赖的库为:mysqlcppconn.dll
在实际开发阶段大家一般都不会忘记添加mysqlcppconn.dll,而容易忽略mysqlcppconn.dll所需要的依赖库:libmysql.dll、msvcp90.dll(9.0版本)、msvcr90.dll(9.0版本)
4、将程序依赖的库添加到对应的文件夹下运行就可以觉得上面2种现象出现的问题。
这是个MS C++运行时库的问题。 如果一个软件/程序用微软的VS编译的话,默认就是依赖这个库的。可能的原因:
1. 你的软件不是安装版,所以软件默认启用系统目录下的运行时库,不兼容。找个安装版。
2. 软件本身有问题.
3. 找到对应的MS C++运行库,可以用depends 软件来看这个软件依赖那个运行库。
目标机器上的运行时库和你编译时的不一致。几种解决方案:1.将你的程序设置为静态链接,并生成release版本才程序,同时将你开发工具的再发行包(redistribute)安装到目标机器上。
2.在目标机器上安装depends,用它分析你的程序需要那些DLL。
3.在你的项目设置中,嵌入清单选项设置为否,这样,你再一次build时,编译器会给你生成一个manifest文件,打开该文件,查看你的程序所依赖的CRT,你需要把这些CRT发布到目标机器上。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)