Qt开发经验 --- 避坑指南(13)
文章目录
- @[toc]
- 1 安装Qt creator后无法使用debug调试
- 2 安装VS后之间安装自带的Windows SDK
- 3 Qt配置ssl
- 4 ubuntu编译linuxdeployqt
文章目录
- @[toc]
- 1 安装Qt creator后无法使用debug调试
- 2 安装VS后之间安装自带的Windows SDK
- 3 Qt配置ssl
- 4 ubuntu编译linuxdeployqt
更多精彩内容 |
---|
👉内容导航 👈 |
👉Qt开发经验 👈 |
1 安装Qt creator后无法使用debug调试
安装最新版本Qt creator15.0.0后,MSVC无法调试,是Qt creator没安装完整,导致安装路径下缺少文件;
2 安装VS后之间安装自带的Windows SDK
-
打开【应用】【安装的应用】;
-
找到【Windows Software Development Kit】;
-
点击右侧
...
,选择【修改】; -
选择【Change】安装或者【Repair】修复已经安装过的环境;
-
勾选【Debugging Tools for Windows】,再点击【Change】进行安装。
3 Qt配置ssl
由于世界上某些地区的进出口限制,Qt默认安装没有OpenSSL工具包;
从Qt 5.6版本开始,官方支持的OpenSSL版本是1.0.0或更高版本;
从Qt版本5.15开始,官方支持的OpenSSL版本是1.1.1或更高版本。
Qt版本5.15.1以后也兼容OpenSSL 3。
Qt安装包附带了OpenSSL支持,如果使用到openssl,需要自己配置环境;
新版本Qt在线安装时好像可用选择安装openssl。
使用地址
-
QT文档https://doc.qt.io/archives/qt-6.6/ssl.html
-
https://www.openssl.org/
-
https://openssl-library.org/source/index.html
-
https://openssl-library.org/source/old/index.html
-
https://github.com/openssl/openssl
Openssl配置
- 查看当前环境是否配置了openssl和支持的版本
qDebug() << "输出当前QT支持的openSSL版本: " << QSslSocket::sslLibraryBuildVersionString();
qDebug() << "OpenSSL支持情况: " <<QSslSocket::supportsSsl();
qDebug() << "OpenSSL运行时SSL库版本: " << QSslSocket::sslLibraryBuildVersionString();
-
windows可以下载对应版本的openssl,然后进行安装(轻量级就可以);
-
安装后将openssl/bin文件夹下的libcrypto-1_1-x64.dll、libssl-1_1-x64.dll两个动态库拷贝到qt的编译器路径下,注意区分32和64位
-
D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin
-
D:\Qt\Qt5.14.2\5.14.2\mingw73_64\bin
-
-
linux可用下载对应版本源码;
- 使用
../config
命令构建; - 使用
make -j8
命令编译; - 然后使用
sudo cp libcrypto.so* libssl.so* /opt/Qt5.12.12/5.12.12/gcc_64/lib/
命令将编译生成的动态库复制到Qt安装路径下的编译器的lib文件夹下。
- 使用
4 ubuntu编译linuxdeployqt
ubuntu22.04
新版本的ubuntu无法直接使用linuxdeployqt,需要自己编译
安装依赖
sudo apt install libfuse2 patchelf
libfuse2 Linux FUSE(用户空间中的文件系统)接口的参考实现。
patchelf用于修改现有的ELF可执行文件和库;
用下面的命令可以设置程序从相对路径链接动态库;
$ORIGIN
是一个特殊的占位符,它表示当前可执行文件所在的目录
RPATH
是一个嵌入到 ELF 文件中的路径列表,用于告诉动态链接器在运行时去哪里查找共享库。patchelf --set-rpath '$ORIGIN/lib/' ./RadarServer # 设置程序动态库链接路径 patchelf --print-rpath ./RadarServer # 打印链接路径
-
下载源码
-
错误1:找不到
libQt5Core.so. 5
,- 将linuxdeployqt复制到
/opt/Qt5.14.2/5.14.2/gcc_64/lib
路径下。 - 或者在
.bashrc
文件中添加环境变量export LD_LIBRARY_PATH=/opt/Qt5.14.2/5.14.2/gcc_64/lib:$LD_LIBRARY_PATH
;
- 将linuxdeployqt复制到
./linuxdeployqt: error while loading shared libraries: libQt5Core.so. 5: cannot open shared object file: No such file or directory
- 错误2:需要安装依赖
sudo apt install libfuse2
appimage 错误dlopen(): error loading libfuse.so.2
- 错误3:打包依赖后还是找不到动态库,可能是patchelf没执行,需要手动执行。
验证
- 打包完成后使用下面命令清除动态库环境变量
export LD_LIBRARY_PATH=""
- 然后再使用ldd命令查看链接动态库是否指向相对路径
ldd ./可执行程序