打包 Qt 应用时关于动态链接库的一些注意事项
在软件发布的时候经常会遇到, 动态链接库找不到的问题, 而且这种问题处理起来还非常麻烦, 因为在本机是开发环境的原因问题经常无法暴露出来, 所以这就坑了, 线面来说说如何避免这种问题的出现.
首先你需要安装一个干净的操作系统, 使用虚拟机就好了, 保持你的虚拟机和你开发的电脑在同一个网段内(Ps: 方便传输数据)
如何安装虚拟机这里就不细说了, 网上搜索一大堆资料.
- 打包好后, 吧包传到虚拟机内
- 打开可执行程序, 如果能正常打开, 那么表示你的库连接没有问题
- 如果弹出提示框, 说你缺少什么, 那么你需要到你的开发环境里去找到这个库, 然后拷贝到可执行程序同目录下的的
Frameworks
目录里, 直到程序可运行
细节
不同平台之间的一些细微差别
macOS
macOS 平台如果出现问题, 会弹出一个崩溃框, 点击报告
按钮, 可以看到崩溃日志, 里面会告诉你除了什么问题, 按照提示操作即可
当你的Frameworks
目录下确实存在这个运行库的时候, 还是爆类似如下的错误时, 可检查是否是链接库的链接位置有问题
1 | Termination Reason: DYLD, [0x1] Library missing |
查看链接位置
1 | $ cd MyApp.app/Contents/Frameworks |
通过上面可知, 确实是链接位置有问题, 应该是一个相对路径才对
修改链接位置
1 | $ install_name_tool -change /usr/local/Cellar/openssl/1.0.2n/lib/libcrypto.1.0.0.dylib @executable_path/../Frameworks/libcrypto.1.0.0.dylib libssl.1.0.0.dylib |
Linux
Linux 平台需要使用终端运行可执行程序, 因为自己双击打开可执行程序, 无法查看错误日志.
Windows
Windows 平台和 macOS 平台太类似, 只不过 Windows 平台太会直接告诉你出了什么问题
需要注意的是: 如果出现了api-ms-win-crt-runtime-l1-1-0.dll
丢失, 那么意味着客户机没有安装运行库, 安装msvc2016_x64
或者msvc2016_x32
即可, google 一下就可以查看到详情了, 这里不细说了