部署cpp程序到其它主机经常遇到程序打开失败问题。一共是2个问题
1.无法找到dll文件。
这种情况就是编译程序选择了动态链接,所以需要连同dll文件一起打包。没有dll文件就会导致打开失败提示找不到dll文件。
解决办法就是把开发依赖的dll文件和程序一起打包,或者安装运行库。比如微软VC++2010运行库之类的。
我记得微软强烈反对开发者发行debug版程序。debug版本依赖debug dll文件。而微软官方运行库提供的是release版本的dll文件。如果你直接部署的debug版本,除非你拷贝的是debug版本的dll文件。否则就算安装微软运行库也没有用。
2.无法定位程序输入点于xxx
这个问题就是因为DLL版本不匹配的问题。比如用mingw 4.8配合了opencv2.14库编译的程序,到了部署机器给他提供的却是mingw5.4的libstdc++-6.dll文件和opencv2.14库文件,就会导致崩溃。可能提示无法定位到opencv库的输入点。实际上出问题的是libstdc++-6.dll这个文件。
这种解决办法就是确认开发环境使用的库版本,对应库版本拷贝dll文件到部署的主机。
总结
没有提供dll库文件
或者你的debug和release库文件弄错了。编译了debug版本的库却提供了release版本的库,编译了release版本的库却提供了debug版本的库。
或者是几个库的版本与开发环境编译工具链的库版本互相不匹配导致的。
在迁移到其它主机编译有一个小问题。
如果不清理原来开发环境的目标文件直接编译链接。又会导致链接出错。找不到符号的问题。
因为新主机可能使用的是不一样版本的库,而旧主机上由旧版本的编译工具链编译的目标文件不是为新版本库准备的,所以会导致链接出错。
所以项目迁移后需要首先清理,然后重新编译。