Linux Ubuntu 搭建Qt RK3399(ARMv8)编译 运行 调试环境

本文介绍了一个关于信息技术领域的具体案例,并详细探讨了相关的技术细节。
<think>我们正在为RK3588平台(ARM架构)构建Qt开发环境,并需要添加WebSocket模块支持。由于RK3588是嵌入式平台,通常需要交叉编译。参考用户提供的引用[1],他们使用了RK3568平台,类似地,RK3588也需要交叉编译Qt。 步骤概述: 1. 准备主机环境Ubuntu 18.04或20.04) 2. 获取RK3588的SDK(包含交叉编译工具链) 3. 下载Qt源码(选择与RK3588兼容的版本,如Qt5.15.2或Qt6.2) 4. 配置Qt编译选项,确保启用WebSocket模块 5. 交叉编译Qt 6. 将编译好的Qt库部署到RK3588设备或SDK中 详细步骤: ### 1. 准备主机环境Ubuntu主机上安装必要的工具: ```bash sudo apt update sudo apt install git build-essential libssl-dev libfontconfig1-dev libdbus-1-dev libfreetype6-dev libicu-dev libx11-dev libxext-dev libxfixes-dev libxft-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync0-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev -y ``` ### 2. 获取RK3588 SDK和交叉编译工具链 参考RK3588官方文档获取SDK,通常包含交叉编译工具链。假设工具链路径为`/opt/toolchain/arm-rockchip830-linux-uclibcgnueabihf`,并设置环境变量: ```bash export TOOLCHAIN_PATH=/opt/toolchain/arm-rockchip830-linux-uclibcgnueabihf export PATH=$TOOLCHAIN_PATH/bin:$PATH export CROSS_COMPILE=arm-rockchip830-linux-uclibcgnueabihf ``` ### 3. 下载Qt源码 选择Qt5.15.2 LTS版本(长期支持,稳定): ```bash wget https://download.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz tar xvf qt-everywhere-src-5.15.2.tar.xz cd qt-everywhere-src-5.15.2 ``` ### 4. 配置编译选项 创建配置脚本`configure.sh`,内容如下: ```bash #!/bin/bash ./configure \ -prefix /opt/Qt5.15.2-rk3588 \ # 安装路径 -opensource \ # 开源版 -confirm-license \ # 确认许可 -release \ # 发布模式 -shared \ # 共享库 -xplatform linux-arm-gnueabi-g++ \ # 目标平台 -optimized-qmake \ # 优化qmake -pch \ # 预编译头 -qt-libjpeg \ # 使用libjpeg -qt-libpng \ # 使用libpng -qt-zlib \ # 使用zlib -no-opengl \ # 无OpenGL(根据RK3588的GPU驱动情况决定) -no-sse2 \ # 禁用SSE2(ARM平台不需要) -no-openssl \ # 如果不需要SSL可以禁用,但WebSocket需要SSL,所以这里我们要启用 -openssl \ # 启用OpenSSL支持(需要先交叉编译OpenSSL) -qt-freetype \ # 使用freetype -no-glib \ # 不使用glib -no-cups \ # 禁用cups -no-dbus \ # 禁用dbus(按需) -no-xcb \ # 禁用xcb(嵌入式通常不需要) -no-xcursor -no-xfixes -no-xrandr -no-xrender -no-xinput -no-xkb \ # 禁用X11相关 -no-iconv \ # 禁用iconv(按需) -nomake examples \ # 不编译示例 -nomake tests \ # 不编译测试 -skip qt3d \ # 跳过不需要的模块 -skip qtactiveqt \ -skip qtcanvas3d \ -skip qtcharts \ -skip qtconnectivity \ -skip qtdatavis3d \ -skip qtdeclarative \ -skip qtdoc \ -skip qtgamepad \ -skip qtlocation \ -skip qtlottie \ -skip qtmacextras \ -skip qtmultimedia \ -skip qtpurchasing \ -skip qtquick3d \ -skip qtquickcontrols \ -skip qtquickcontrols2 \ -skip qtquicktimeline \ -skip qtscript \ -skip qtscxml \ -skip qtsensors \ -skip qtserialbus \ -skip qtserialport \ -skip qtspeech \ -skip qtsvg \ -skip qttools \ -skip qttranslations \ -skip qtvirtualkeyboard \ -skip qtwayland \ -skip qtwebchannel \ -skip qtwebengine \ -skip qtwebglplugin \ -skip qtwebsockets \ # 注意:这里我们不跳过WebSockets模块 -skip qtwebview \ -skip qtwinextras \ -skip qtx11extras \ -skip qtxmlpatterns \ -v # 输出详细信息 ``` 注意:这里我们显式地没有跳过`qtwebsockets`模块(默认是包含的,所以也可以通过不跳过的形式保留)。同时,我们启用了`-openssl`,因为WebSocket的加密通信需要SSL。 ### 5. 交叉编译OpenSSL(如果未提供) WebSocket依赖OpenSSL,因此需要先交叉编译OpenSSL: ```bash wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz tar xvf openssl-1.1.1k.tar.gz cd openssl-1.1.1k ./Configure linux-armv4 --prefix=$PWD/install --cross-compile-prefix=arm-rockchip830-linux-uclibcgnueabihf- make && make install ``` 然后在Qt配置中指定OpenSSL路径: ```bash -openssl-linked -I /path/to/openssl-1.1.1k/install/include -L /path/to/openssl-1.1.1k/install/lib ``` ### 6. 修改qmake.conf 由于我们指定了`xplatform`为`linux-arm-gnueabi-g++`,我们需要检查`qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf`文件,确保编译器设置正确: ```makefile # 设置交叉编译工具链 MAKEFILE_GENERATOR = UNIX CONFIG += incremental QMAKE_INCREMENTAL_STYLE = sublib include(../common/linux.conf) include(../common/gcc-base-unix.conf) include(../common/g++-unix.conf) # 修改为RK3588的交叉编译工具 QMAKE_CC = $${CROSS_COMPILE}gcc QMAKE_CXX = $${CROSS_COMPILE}g++ QMAKE_LINK = $${CROSS_COMPILE}g++ QMAKE_LINK_SHLIB = $${CROSS_COMPILE}g++ # 修改工具链路径(如果环境变量已设置,则无需修改) # 如果环境变量已经设置,这里可以直接使用环境变量 # 目标平台配置 QMAKE_CFLAGS += -march=armv8-a -mtune=cortex-a76.cortex-a55 -mfloat-abi=hard -mfpu=neon-vfpv4 QMAKE_CXXFLAGS += -march=armv8-a -mtune=cortex-a76.cortex-a55 -mfloat-abi=hard -mfpu=neon-vfpv4 # 其他配置 load(qt_config) ``` ### 7. 编译和安装 ```bash make -j$(nproc) make install ``` 编译完成后,Qt将安装到`/opt/Qt5.15.2-rk3588`。 ### 8. 在RK3588设备上部署 将安装目录拷贝到RK3588的文件系统中,并设置环境变量(在RK3588设备上): ```bash export QT_ROOT=/opt/Qt5.15.2-rk3588 export LD_LIBRARY_PATH=$QT_ROOT/lib:$LD_LIBRARY_PATH export QT_PLUGIN_PATH=$QT_ROOT/plugins export QML2_IMPORT_PATH=$QT_ROOT/qml ``` ### 9. 在Qt Creator中配置 在主机上的Qt Creator中,添加编译好的Qt版本: - 打开Qt Creator -> 工具 -> 选项 -> Kits - 在“Qt Versions”中添加`/opt/Qt5.15.2-rk3588/bin/qmake` - 在“Kits”中添加一个Kit,选择该Qt版本,并设置编译器为交叉编译工具链 ### 验证WebSocket支持 在Qt项目文件(.pro)中添加: ```qmake QT += websockets ``` 测试代码: ```cpp #include <QWebSocket> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QWebSocket socket; qDebug() << "WebSocket support:" << (socket.isValid() ? "Yes" : "No"); return a.exec(); } ``` ### 注意事项 - **OpenSSL交叉编译**:必须确保OpenSSL交叉编译成功,且Qt配置时正确链接。 - **设备树配置**:RK3588设备上需要安装相应的OpenSSL库(将交叉编译的OpenSSL库拷贝到设备上)。 - **内核配置**:如果使用WebSocket的加密通信,需要内核支持加密算法(通常RK SDK已包含)。 如果遇到问题,请检查配置日志(config.log)和编译日志。 §§相关问题§§ 1. 如何为RK3588交叉编译OpenSSL? 2. Qt交叉编译时如何跳过不需要的模块以加快编译速度? 3. 如何在RK3588上部署Qt应用程序? [^1]: 参考站内引用:开发环境/工具:rk3568_linux 源码、ubuntu18.04、QT Creator、vs code、MobaXterm、SSH、qmake 工具链。</think>### 在 RK3588 上安装 Qt 编译环境并添加 WebSocket 模块 以下是针对 RK3588 平台的 Qt 编译环境搭建和 WebSocket 模块添加的完整指南: --- #### 一、环境准备 1. **主机环境**(Ubuntu 18.04/20.04): ```bash sudo apt update sudo apt install git build-essential cmake libssl-dev libfontconfig1-dev \ libdbus-1-dev libfreetype6-dev libicu-dev libxcb-xinerama0-dev \ libxkbcommon-dev libxkbcommon-x11-dev ``` 2. **获取 RK3588 工具链**(从官方 SDK 提取): ```bash # 示例路径,需替换为实际工具链路径 export TOOLCHAIN_PATH=/opt/toolchains/arm-rockchip830-linux-uclibcgnueabihf export PATH=$TOOLCHAIN_PATH/bin:$PATH ``` --- #### 二、交叉编译 Qt 基础库 1. **下载 Qt 源码**(推荐 5.15 LTS): ```bash wget https://download.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz tar xvf qt-everywhere-src-5.15.2.tar.xz cd qt-everywhere-src-5.15.2 ``` 2. **配置编译选项**(关键步骤): ```bash ./configure \ -prefix /opt/Qt5.15.2-rk3588 \ # 安装路径 -xplatform linux-arm-gnueabi-g++ \ # 目标平台 -opensource -confirm-license \ -release -shared \ -optimize-size \ -qt-zlib -qt-libjpeg -qt-libpng \ -no-opengl -no-sse2 -no-openssl \ -skip qtwebengine -skip qtwebview \ # 跳过不必要模块 -qt-websockets # 显式启用 WebSocket ``` 3. **编译和安装**: ```bash make -j$(nproc) make install ``` --- #### 三、WebSocket 模块特别配置 1. **验证 WebSocket 是否启用**: ```bash # 检查生成文件 grep -r "QT_CONFIG += websockets" /opt/Qt5.15.2-rk3588/mkspecs/ ``` 2. **解决依赖问题**: - 如果出现 SSL 相关错误,安装依赖: ```bash sudo apt install libssl-dev ``` - 重新配置时添加 OpenSSL 支持: ```bash ./configure ... -openssl-linked -I /path/to/openssl/include -L /path/to/openssl/lib ``` --- #### 四、Qt Creator 配置 1. **添加交叉编译工具链**: - 打开 *工具 > 选项 > Kits* - 添加 GCC 交叉编译器:`arm-rockchip830-linux-g++` - 设置 sysroot 为 RK3588 SDK 路径 2. **配置 Qt 版本**: - 添加 qmake 路径:`/opt/Qt5.15.2-rk3588/bin/qmake` - 创建 Kit 关联编译器和 Qt 版本 --- #### 五、项目中使用 WebSocket 在 `.pro` 文件中添加: ```qmake QT += core network websockets # 添加 WebSocket 模块 # RK3588 特殊库路径 LIBS += -L$${RK3588_SDK}/lib -lssl -lcrypto ``` 测试代码片段: ```cpp #include <QWebSocket> QWebSocket *socket = new QWebSocket(); socket->open(QUrl("ws://192.168.1.100:8080")); connect(socket, &QWebSocket::connected, [](){ qDebug() << "WebSocket connected to RK3588!"; }); ``` --- #### 六、部署到 RK3588 设备 1. **复制运行时库**: ```bash scp -r /opt/Qt5.15.2-rk3588/lib root@rk3588-ip:/usr/local ``` 2. **设置设备环境变量**: ```bash echo "export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH" >> ~/.bashrc source ~/.bashrc ``` --- #### 关键注意事项 1. **内核头文件匹配**:确保 RK3588 SDK 内核版本与设备一致 2. **OpenSSL 兼容性**:RK3588 需使用 `libssl1.1`,禁用 `libssl3` 3. **性能优化**:编译时添加 `-march=armv8-a -mtune=cortex-a76.cortex-a55` 4. **调试支持**:开发阶段添加 `-force-debug-info` 参数[^1] > **提示**:完整编译约需 2-4 小时(取决于主机性能),建议使用 `screen` 会话管理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值