搭建 Linux 开发环境
本节介绍 QVSOA Linux 开发环境的搭建方法。
安装 QVSOA 环境
QVSOA 开发需要依赖以下环境:
Qt Creator,下载 Qt Creator 。
Qt SDK,下载 Qt SDK 。
联系我们 获取 QVSOA SDK。
操作步骤
安装 Qt Creator
运行 Qt Creator 在线安装器。
在登录页,输入用户名和密码,并单击下一步,登录 Qt 账户。
在安装文件夹页选择安装 Qt 的目录,并单击下一步。
在选择组件页选择安装 Qt 版本,建议选择 Qt 5.15.2,并单击下一步,根据提示完成安装。
安装 Qt SDK
安装 Qt SDK 前请确保以下工具已经正确安装。
sudo apt install make sudo apt install g++ sudo apt install gcc-aarch64-linux-gnu sudo apt install g++-aarch64-linux-gnu
说明:
建议安装工具的版本:- make :GNU Make 4.3 。
- gcc :12.3.0 。
- aarch64-linux-gun-gcc : 12.3.0 。
解压 Qt SDK 压缩包,根据目标平台修改 "qmake.confg" 文件并指定交叉编译工具链。此处以修改 aarch64 平台的 "qtbase/mkspecs/linux-aarch64-gnu-g++/qmake.conf" 文件为例。
# # qmake configuration for building with aarch64-linux-gnu-g++ # MAKEFILE_GENERATOR = UNIX CONFIG += incremental QMAKE_INCREMENTAL_STYLE = sublib include(../common/linux.conf) include(../common/gcc-base-unix.conf) include(../common/g++-unix.conf) # modifications to g++.conf QMAKE_CC = /usr/bin/aarch64-linux-gnu-gcc QMAKE_CXX = /usr/bin/aarch64-linux-gnu-g++ QMAKE_LINK = /usr/bin/aarch64-linux-gnu-g++ QMAKE_LINK_SHLIB = /usr/bin/aarch64-linux-gnu-g++ # modifications to linux.conf QMAKE_AR = /usr/bin/aarch64-linux-gnu-ar cqs QMAKE_OBJCOPY = /usr/bin/aarch64-linux-gnu-objcopy QMAKE_NM = /usr/bin/aarch64-linux-gnu-nm -P QMAKE_STRIP = /usr/bin/aarch64-linux-gnu-strip load(qt_config)
添加脚本 "autoconfigure.sh" 用于生成 Makefile 文件。
#!/bin/sh ./configure \ -v \ -prefix /opt/qt-5.15.2 \ -release \ -opensource \ -no-accessibility \ -make libs \ -xplatform linux-aarch64-gnu-g++ \ -optimized-qmake \ -pch \ -qt-zlib \ -skip qtdeclarative \ -no-opengl \ -no-sse2 \ -no-openssl \ -no-glib \ -no-pkg-config \ -no-separate-debug-info
说明:
- -prefix:指定 Qt SDK 安装目录。
- -xplatform:目标程序运行平台,参考目录 qtbase/mkspecs 列表。
在文件 "qtbase/src/corelib/global/qglobal.h" 中添加头文件
#include <limits>
解决编译报错。#ifndef QGLOBAL_H #define QGLOBAL_H #ifdef __cplusplus # include <type_traits> # include <cstddef> # include <utility> # include <limits> #endif
开始编译,直到编译完成。
./autoconfigure ./make sudo ./make install
安装 QVSOA SDK
运行 QVSOA SDK 安装程序,并在欢迎页单击下一步。
QVSOA 需要安装在 Qt SDK 目录中,选择 Qt SDK 目录,将自动追加 QVSOA 模块路径,并单击下一步,直到安装完成。
QVSOA SDK 依赖 C 版本 VSOA ,请确保环境已经安装目标架构的 C 版本 VSOA SDK。
ls /opt/qt-5.15.2/lib/ | grep libvsoa* libvsoa-client.so libvsoa-hpserv.so libvsoa-json.so libvsoa-parser.so libvsoa-position.so libvsoa-server.so
配置 qmake
打开 Qt Creator 在菜单栏中单击工具 > 外部 > 配置 > 构建套件( Kit )。
在 Qt 版本页手动添加 qmake。
在编译器页手动添加 C 和 C++ 的编译器,输入编译器名称并指定编译器路径。
在构建套件( kit )页手动添加交叉编译设备,输入名称并选择编译器和 Qt 版本。
创建 QVSOA Qt 程序
打开 Qt Creator 在菜单栏中单击文件 > New Project > Qt Console Application,并单击选择,在弹出页中输入名称和创建路径,单击下一步。
在构建系统页选择 qmake,并单击下一步 。
在构建套件( Kit )页选择 aarch64,并单击下一步。
在工程文件 "example.pro" 中添加
QT += vsoa
。QT = core QT += vsoa CONFIG += c++17 cmdline # You can make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target
在源码文件中添加
#include <QVsoa>
。#include <QCoreApplication> #include <QDebug> #include <QTimer> #include <QProcessEnvironment> #include <QVsoa> const QString MY_SERVER_PASSWD = "123456"; int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // Initialize server QVsoaServer server("{\"name\":\"axis_server\"}"); if (server.isInvalid()) { qDebug() << "Can not create VSOA server!"; return -1; } // If need password server.setPassword(MY_SERVER_PASSWD); int port = 3002; int auto_port = QProcessEnvironment::systemEnvironment().value("VSOA_AUTO_PORT", "-1").toInt(); if (auto_port != -1) { port = auto_port; } // Start server if (!server.start(QVsoaSocketAddress(AF_INET, "0.0.0.0", port))) { qDebug() << "Can not start VSOA server!"; return -1; } qDebug() << "Started VSOA server."; static int roll = 1; static int pitch = 1; static int yaw = 1; QTimer timer; QObject::connect(&timer, &QTimer::timeout, [&] { if (server.isSubscribed("/axis")) { // Publish /axis server.publish( "/axis", QVsoaPayload(QString::asprintf("{\"roll\": %d, \"pitch\": %d, \"yaw\": %d}", roll++, pitch++, yaw++), {})); } }); timer.start(1000); return a.exec(); }
选中项目文件夹,右键单击构建,完成程序编译。