QT交叉編譯環境配置

QT交叉編譯環境配置

  • 1 配置交叉編譯工具鏈
    • 1.1 解壓 放到`/opt`中
    • 1.2 使用環境變量
      • 1.2.1 設置成永久的環境變量
      • 1.2.2 臨時環境變量
    • 1.3 安裝編譯需要的軟件
  • 2 編譯tslib庫(如果不需要觸摸屏直接跳過)
  • 3. 編譯qt
    • 3.1 編譯源碼
    • 3.2 設置QCreator
  • 4 說明
    • 4.1 關于編譯器名字的區別
    • 4.2 如果 mkspecs 目錄中沒有你用的編譯器怎么辦?
    • 4.3 QT各個模塊的作用

如果遇到疑問,看看第4章 說明中有沒有能解決你疑惑的答案

1 配置交叉編譯工具鏈

我使用的是gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/

1.1 解壓 放到/opt

sudo tar -xf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar -C /opt

1.2 使用環境變量

export TOOLCHAIN_DIR=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
export SYSROOT=${TOOLCHAIN_DIR}/aarch64-linux-gnu/libc
export PATH=${TOOLCHAIN_DIR}/bin:$PATHexport CC=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-gcc
export CXX=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-g++
export AR=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ar
export LD=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ld
export RANLIB=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ranlib

1.2.1 設置成永久的環境變量

sudo vim ~/.bashrc # 打開設置環境變量
#將1.2的內容復制到文件末尾
source ~/.bashrc #使環境變量生效或者#多用戶生效
sudo vim /etc/profile
source /etc/profile

1.2.2 臨時環境變量

方式一:
打開命令窗口,將1.2內容復制到里面運行
方式二:
創建set_arm_env.sh文件,將下面內容復制進去

#!/bin/bash
export TOOLCHAIN_DIR=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
export SYSROOT=${TOOLCHAIN_DIR}/aarch64-linux-gnu/libc
export PATH=${TOOLCHAIN_DIR}/bin:$PATHexport CC=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-gcc
export CXX=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-g++
export AR=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ar
export LD=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ld
export RANLIB=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ranlib

執行chmod +x set_arm_env.shsource set_arm_env.sh

驗證方式:
aarch64-linux-gnu-gcc -v

echo “CC=$CC”

1.3 安裝編譯需要的軟件

sudo apt update
sudo apt install perl
sudo apt install python3 #或者python2
sudo apt-get install autoconf automake libtool

2 編譯tslib庫(如果不需要觸摸屏直接跳過)

tslib 是一個用于 觸摸屏輸入事件校準和處理 的輕量級開源庫,常用于 嵌入式 Linux 系統 上的電阻式或電容式觸摸屏。
作用:

  1. 處理觸摸屏原始坐標數據
  2. 進行觸摸校準(calibration)
  3. 消除觸摸漂移、誤差
  4. 提供統一的觸摸事件接口(/dev/input/eventX)
#下載
git clone https://gitee.com/mqinglang/tslib.git
cd tslib
./autogen.sh
./configure --host=aarch64-linux-gnu ac_cv_func_malloc_0_nonnull=yes --cache-file=aarch64-linux.cache -prefix=/home/mql/qt_src/arm64_linux_gnu/tslib
make -j$(nproc)
make install

3. 編譯qt

3.1 編譯源碼

我使用的是qt5.15.2。你在源碼中qt-everywhere-src-5.15.2/qtbase/mkspecs這個路徑下面會看到各個平臺的編譯配置文件,我用的是arm64-linux-gnu這里面已經包含了這個編譯器的編譯配置如圖:
在這里插入圖片描述
在這里插入圖片描述
qmake.conf里面是編譯配置:
在這里插入圖片描述

  • 詳細解釋如下
#這是注釋,說明此配置是針對 aarch64-linux-gnu-g++ 交叉編譯器的。
# qmake configuration for building with aarch64-linux-gnu-g++ 
# 指定生成的 Makefile 格式是 Unix 風格。
MAKEFILE_GENERATOR      = UNIX
# 這是增量構建的設置,incremental 表示支持增量鏈接(部分模塊重編譯);
# sublib 說明增量編譯模式按子庫為單位。
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublib
# 引入 Qt 提供的通用 Linux + GCC 配置。
# 這些 conf 文件位于 qtbase/mkspecs/common/ 下,封裝了 GCC 編譯選項和 Linux 系統默認參數。
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# 指定交叉編譯所使用的編譯器為 aarch64-linux-gnu-gcc 和 aarch64-linux-gnu-g++
# modifications to g++.conf
QMAKE_CC                = aarch64-linux-gnu-gcc
QMAKE_CXX               = aarch64-linux-gnu-g++
QMAKE_LINK              = aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB        = aarch64-linux-gnu-g++
# 設置歸檔工具(生成 .a 靜態庫)等。用于構建時壓縮/提取符號:
# modifications to linux.conf
QMAKE_AR                = aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY           = aarch64-linux-gnu-objcopy
QMAKE_NM                = aarch64-linux-gnu-nm -P
QMAKE_STRIP             = aarch64-linux-gnu-strip
  • 變量名 含義
    QMAKE_CC C 編譯器
    QMAKE_CXX C++ 編譯器
    QMAKE_LINK 鏈接器(C++)
    QMAKE_LINK_SHLIB 動態庫鏈接器(C++)
    QMAKE_AR 靜態庫打包工具
    QMAKE_OBJCOPY 對目標文件進行復制、符號剝離等操作
    QMAKE_NM 顯示目標文件符號表
    QMAKE_STRIP 剝離調試信息/符號表
# 下載
wget https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz
# 解壓
tar -xf qt-everywhere-src-5.15.2.tar.xz
cd qt-everywhere-src-5.15.2/

創建一個腳本qtsrc.sh,記得將里面的路徑修改成你自己對應的,然后加執行權限

#!/bin/bashecho "設置交叉編譯工具鏈環境變量..."
export TOOLCHAIN_DIR=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu
export SYSROOT=${TOOLCHAIN_DIR}/aarch64-linux-gnu/libc
export PATH=${TOOLCHAIN_DIR}/bin:$PATHexport CC=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-gcc
export CXX=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-g++
export AR=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ar
export LD=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ld
export RANLIB=${TOOLCHAIN_DIR}/bin/aarch64-linux-gnu-ranlibecho "設置 TSLIB 相關路徑..."
export TSLIB_ROOT=/home/mql/qt_src/arm64_linux_gnu/tslib
export PKG_CONFIG_SYSROOT_DIR=$SYSROOT
export PKG_CONFIG_PATH=$TSLIB_ROOT/lib/pkgconfig
export TSLIB_INCLUDE_DIR=$TSLIB_ROOT/include
export TSLIB_LIBRARY_DIR=$TSLIB_ROOT/libecho "開始執行 Qt configure 配置..."
./configure \-prefix /home/mql/qt_src/arm64_linux_gnu/qt5.15.2 \-release \-opensource -confirm-license \-optimized-qmake \-shared \-xplatform linux-aarch64-gnu-g++ \-pch \-c++std c++11 \-linuxfb \-tslib \-qt-zlib \-qt-pcre \-qt-freetype \-qt-harfbuzz \-qt-libpng \-qt-libjpeg \-qt-sqlite \-plugin-sql-sqlite \-gui -widgets -dbus-runtime \-no-openssl \-no-xcb \-no-opengl \-nomake tests \-nomake examples \-recheck-all \-I $TSLIB_INCLUDE_DIR \-L $TSLIB_LIBRARY_DIR \-skip qtnetworkauth \-skip qtwebsockets \-skip qtwebchannel \-skip qtscript \-skip qtwebengine \-skip qtwebview \-skip qtlocation \-skip qtremoteobjects \-skip qtpurchasing \-skip qtactiveqt \-skip qtwinextras \-skip qtx11extras \-skip qtmacextras \-skip qtandroidextras \-skip qtgamepad \-skip qt3d \-skip qtdatavis3d \-skip qtquick3d \-skip qtgraphicaleffects \-skip qtquickcontrols \-skip qtquickcontrols2 \-skip qtquicktimeline \-skip qtlottie \-skip qtsensors \-skip qtspeech \-skip qtdoc \-skip qtwebglpluginecho " configure 配置完成,請檢查是否有錯誤信息。"
echo "接下來可以執行 make -jN 進行編譯,例如:make -j$(nproc)"

編譯安裝

make -j$(nproc)
make install

內容如下
在這里插入圖片描述

編譯參數說明:

# 查看所有參數以及使用方法
./configure -h # 進入到源碼根目錄(cd qt-everywhere-src-5.15.2),查看模塊名字
ls qt*/ | grep -E '^qt'

3.2 設置QCreator

在這里插入圖片描述

在這里插入圖片描述
在這里插入圖片描述

在這里插入圖片描述/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
在這里插入圖片描述
在這里插入圖片描述

4 說明

4.1 關于編譯器名字的區別

以gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu為例:

部分含義
gccGNU 編譯器套件(GNU Compiler Collection)
linaroLinaro 組織維護的版本,專為 ARM 平臺優化
7.5.0GCC 的主版本號,是 gcc 7 系列,支持 C++11
2019.12工具鏈構建的版本時間(2019年12月發布)
x86_64構建主機架構(host),即你用這個工具鏈的機器(通常是 x86_64 架構的 PC)
aarch64-linux-gnu目標架構(target),說明這套工具鏈是用來生成 aarch64(ARM64)Linux 程序的
  • aarch64-linux-gnu

是目標系統(Target triple)的三個部分:

部分說明
aarch64目標 CPU 架構(ARMv8,64 位)
linux目標操作系統
gnu使用的是 glibc 運行時(不是 uClibc 或 musl)

你在官網可能開看到了以下諸多編譯器名字,又有什么區別:

aarch64-elf			
aarch64-linux-gnu			
aarch64_be-elf			
aarch64_be-linux-gnu			
arm-eabi			
arm-linux-gnueabi			
arm-linux-gnueabihf			
armeb-eabi			
armeb-linux-gnueabi			
armeb-linux-gnueabihf		
armv8l-linux-gnueabihf
名稱架構OSC庫浮點支持字節序用途
aarch64-elfARM64裸機-小端裸機開發、bootloader
aarch64-linux-gnuARM64Linuxglibc支持小端主流 編譯架構
aarch64_be-linux-gnuARM64Linuxglibc支持大端非常少見
arm-linux-gnueabiARM32Linuxglibcsoft-float小端較老系統,性能差
arm-linux-gnueabihfARM32Linuxglibc硬浮點小端Raspberry Pi、嵌入式主流
arm-eabiARM32裸機newlib小端MCU開發(如 STM32)
armeb-linux-gnueabihfARM32Linuxglibc硬浮點大端很少用
armv8l-linux-gnueabihfARMv8 (32位)Linuxglibc硬浮點小端Raspberry Pi(32位系統)

4.2 如果 mkspecs 目錄中沒有你用的編譯器怎么辦?

假設你正在用的是 csky-abiv2-ux-linuxv3615 工具鏈,而 mkspecs/ linux-csky-ux-g++不存在怎么辦?你可以手動創建它:

  • 第一步:準備交叉工具鏈路徑(假設)

/usr/local/arm/csky-abiv2-ux-linuxv3615/

├── bin/
│   ├── csky-linux-uclibcabiv2-gcc
│   ├── csky-linux-uclibcabiv2-g++
│   ├── csky-linux-uclibcabiv2-ar
│   └── ...
├── libc/
├── include/
└── ...
  • 第二步:創建 Qt 的 mkspec 平臺目錄
cd ~/qt_src/qt-everywhere-src-5.15.2/qtbase/mkspecs
cp -r linux-arm-gnueabi-g++ linux-csky-ux-g++

如果沒有 linux-arm-gnueabi-g++,可以復制任意近似平臺的 mkspec,例如 linux-g++,然后改名。

  • 第三步:編輯 linux-csky-ux-g++/qmake.conf
    用你實際的編譯器前綴(如 csky-linux-uclibcabiv2-)修改內容如下:
# qmake configuration for building with csky-linux-uclibcabiv2-g++MAKEFILE_GENERATOR      = UNIX
CONFIG                 += incremental
QMAKE_INCREMENTAL_STYLE = sublibinclude(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)# 交叉編譯器
QMAKE_CC                = csky-linux-uclibcabiv2-gcc
QMAKE_CXX               = csky-linux-uclibcabiv2-g++
QMAKE_LINK              = csky-linux-uclibcabiv2-g++
QMAKE_LINK_SHLIB        = csky-linux-uclibcabiv2-g++# 工具鏈工具
QMAKE_AR                = csky-linux-uclibcabiv2-ar cqs
QMAKE_OBJCOPY           = csky-linux-uclibcabiv2-objcopy
QMAKE_NM                = csky-linux-uclibcabiv2-nm -P
QMAKE_STRIP             = csky-linux-uclibcabiv2-stripload(qt_config)
  • 第四步:配置 Qt 的 configure 腳本時使用它
    你的配置腳本中的平臺參數應修改為:
    -xplatform linux-csky-ux-g++

環境變量也對應的修改

4.3 QT各個模塊的作用

按需選擇編譯

模塊名功能說明是否建議保留
qtbaseQt 的核心模塊,包含 QtCore、QtGui、QtWidgets?必須保留
qtdeclarativeQML 與 QtQuick 引擎支持??可選
qttoolsQt 工具鏈(如 lupdate, designer 等)??可選
qtserialport串口支持??可選
qtsvgSVG 圖像支持??可選
qtmultimedia音視頻播放、攝像頭等??可選
qtcharts圖表控件??可選
qtnetworkauthOAuth 授權支持?可跳過
qtconnectivity藍牙、NFC 等?可跳過
qtserialbusCAN、Modbus 等總線通信支持??可選
qtwebsocketsWebSocket 通信支持??可選
qtwebchannelWeb 與 Qt 通信橋接(QWebChannel)??可選
qtimageformats額外圖像格式支持,如 tiff/webp/mng??可選
qtxmlpatternsXML/XPath/XQuery 處理?可跳過
qtscxml狀態機 XML 支持?可跳過
qtscriptQtScript 支持(已廢棄)?強烈建議跳過
qtwebengineChromium 內核瀏覽器支持,依賴重?建議跳過
qtwebview嵌入瀏覽器控件?建議跳過
qtlocation地圖與定位服務?可跳過
qtremoteobjects分布式對象(遠程調用)?可跳過
qtpurchasing應用內購買支持?可跳過
qtactiveqt與 ActiveX 交互,僅用于 Windows?可跳過
qtwinextrasWindows 特有控件與特性支持?可跳過
qtx11extrasX11 特性封裝,適用于 X11 環境?可跳過
qtmacextrasmacOS 特性封裝?可跳過
qtandroidextrasAndroid 平臺特性支持?可跳過
qtgamepad游戲手柄支持?可跳過
qt3d3D 圖形支持?可跳過
qtdatavis3d三維數據圖表?可跳過
qtquick3dQt Quick 3D 模塊?可跳過
qtvirtualkeyboard虛擬鍵盤(觸摸屏鍵盤)??可選
qtgraphicaleffectsQML 圖形特效模塊??可選
qtquickcontrols / qtquickcontrols2QML 控件??可選
qtquicktimeline時間軸動畫控制模塊??可選
qtlottie播放 Lottie 動畫 JSON??可選
qtsensors傳感器支持?可跳過
qtspeech文本轉語音支持?可跳過
qtdocQt 文檔模塊,不影響功能?建議跳過
qttranslations多語言翻譯文件?建議跳過
qtwebglpluginWebGL 插件(瀏覽器用)?建議跳過

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/91494.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/91494.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/91494.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Android】【Java】一款簡單的文本/圖像加解密APP

寫在前面 之前寫過一篇博客,名為《【Java編程】【計算機視覺】一種簡單的圖片加/解密算法》,介紹了用Java在電腦上對圖片進行簡單的加密和解密操作,見鏈接: 文章鏈接 但是,文中所描述的算法在實際操作當中,存在嚴重的噪音(圖像失真)的問題(且原因不明),本次經筆者研…

技術筆記 | Ubuntu 系統 OTA 升級全流程詳解

前言:在嵌入式系統設備管理中,OTA(Over-The-Air)升級是實現設備遠程維護、功能迭代的核心能力。本文基于 Ubuntu 系統環境,詳細拆解 updateEngine 工具的 OTA 升級方案,從配置開啟、命令使用到實戰案例與問…

重復請求問題

重復請求問題 使用Promise和AbortController來實現思路是:通過在會話緩存中存儲和比較請求信息,來防止用戶在短時間內重復提交相同的請求。 具體思路如下: 存儲請求信息:每次請求時,將請求的相關信息(如URL…

CentOS7 Docker安裝RocketMQ完整教程

目錄 前言 環境準備 系統要求 檢查Docker狀態 創建網絡和目錄 創建Docker網絡 創建數據目錄 安裝NameServer 啟動NameServer容器 參數說明 驗證NameServer啟動 安裝Broker 創建Broker配置文件 啟動Broker容器 參數說明 驗證Broker啟動 安裝管理控制臺 啟動控制…

main函數,常量指針與指針常量,野指針等,void與void的區別

指針(續) main函數原型 定義 main函數有多種定義格式,main函數也是函數,函數相關的結論對main函數也有效。 main函數的完整寫法:int main(int argc, char *argv[]){..}int main(int argc, char **argv){..}擴展寫法&am…

Mac m系列芯片安裝node14版本使用nvm + Rosetta 2

由于蘋果 M 系列芯片(包括 M4)使用的是 ARM 架構,而 Node.js 14 是在英特爾 x86 架構時代發布的,因此在 M 系列 Mac 上安裝 Node.js 14 可能會遇到兼容性問題 解決方法:使用 nvm Rosetta 2右鍵點擊「終端」→「顯示簡…

前端基礎之《Vue(26)—Vue3兩種語法范式》

一、選項式1、HTML寫法<!-- 跟 Vue 說 Hello World&#xff01; --><script type"module"> import { createApp } from vuecreateApp({data() {return {message: Hello World!}} }).mount(#app) </script><div id"app"><h1>…

題目:BUUCTF之rip(pwn)

網址 BUUCTF在線評測https://buuoj.cn/challenges#rip打開&#xff0c;如圖所示 提示&#xff1a;先別啟動靶機&#xff0c;靶機可以最后在啟動&#xff0c;先分析下載的附件pwn1。 點擊下載&#xff0c;下載完成之后&#xff0c;該文件后綴類型改為exe&#xff08;就是將pwn…

el-button長按觸發事件(含未響應的解決方案)

參考代碼實現按鈕長按觸發邏輯 <template><el-button mousedown"handleMouseDown" mouseup"handleMouseUp">長按我</el-button> </template>data(){return{isPressed: false,timer: null,}},methods:{handleMouseDown() {this.isP…

List和 ObservableCollection 的區別

1. 變更通知機制?? ??ObservableCollection<T>?? 實現了INotifyCollectionChanged和INotifyPropertyChanged接口&#xff0c;當集合元素被添加、刪除、替換或重置時&#xff0c;會自動觸發CollectionChanged事件&#xff0c;通知綁定的UI控件更新&#xff08;如WPF…

支付寶沙箱(白屏,用戶訂單參數錯誤等)

情況&#xff1a;Laravel項目的line 對接 支付寶沙箱測試 手機網站支付 1&#xff1a;沙箱地址&#xff0c;小到我找不到&#xff1a;沙箱應用 - 開放平臺 2&#xff1a;雖然提供了系統密鑰&#xff0c;但是只是測API鏈接的&#xff0c;要沙箱測試轉賬什么的&#xff0c;得用…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 微博評論IP地圖可視化分析實現

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解微博評論IP地圖可視化分析實現 視頻在線地…

【代碼隨想錄】刷題筆記——二叉樹篇

目錄 144. 二叉樹的前序遍歷 94. 二叉樹的中序遍歷 145. 二叉樹的后序遍歷 102. 二叉樹的層序遍歷 226. 翻轉二叉樹 101. 對稱二叉樹 104. 二叉樹的最大深度 111. 二叉樹的最小深度 222. 完全二叉樹的節點個數 110. 平衡二叉樹 257. 二叉樹的所有路徑 404. 左葉子之…

基于deepseek的文本解析 - 超長文本的md結構化

pdf超長合同或其他超100頁非結構化文檔&#xff0c;很難全量提交deepseek進行分析&#xff0c;一般需要先進行分割。然而&#xff0c;不管是langchain還是llamaindex提供的文本分割工具&#xff0c;很難直接對非結構化文本進行準確的內容分割&#xff0c;很多原始整體段落被劃分…

介紹一個圖像修復開源項目,從模糊到清晰僅需1.7秒:HYPIR圖像修復技術如何改變數字世界?

文章概要 作為一名長期關注圖像處理技術的愛好者&#xff0c;當我第一次接觸到HYPIR這一革命性圖像修復工具時&#xff0c;我被其驚人的速度和質量所震撼。本文將全面介紹由中國科學院深圳先進技術研究院董超研究員團隊研發的HYPIR圖像修復大模型&#xff0c;詳細解析其核心技術…

基于UDP的SNMP協議

SNMP協議詳解 SNMP (Simple Network Management Protocol)&#xff0c;“簡單網絡管理協議”&#xff0c;是廣泛應用于TCP/IP網絡中&#xff0c;用于管理和監控網絡設備的一種標準協議。它允許網絡管理員查詢網絡設備的狀態信息、配置參數、接收故障告警等&#xff0c;從而實現…

3D空間中的變換矩陣

3D 空間中的變換矩陣詳解 在 3D 計算機圖形學中&#xff0c;所有幾何變換都可以通過 44 齊次變換矩陣 來表示。以下詳細介紹各種變換矩陣及其原理。 核心變換矩陣 1. 單位矩陣&#xff08;不變變換&#xff09; I[1000010000100001] I \begin{bmatrix} 1 & 0 & 0 &…

長連接(Long Connection)詳解

一、長連接基本概念長連接&#xff08;也稱為持久連接&#xff09;是指在一個TCP連接上可以連續發送多個HTTP請求/響應&#xff0c;而不是每次通信都建立新的連接。這是HTTP/1.1的默認行為&#xff0c;通過Connection: keep-alive頭部實現。二、工作原理1. 傳統短連接流程客戶端…

【匯總】接口自動化測試 + 持續集成(文末視頻演示)

技術棧&#xff1a;java testng httpclient allure fastjson jsonpath poi/yaml log4j 有建議請聯系wx&#xff1a;ren168632201 java接口自動化系列(01)&#xff1a;自動化測試框架設計(入門版) java接口自動化系列(02)&#xff1a;測試數據文件設計(excel/yam) java接…

科研快報 |無人機+AI:廣東防控基孔熱背后的技術革命

Prism Path 科 研 快 報 CS跨學科頂尖期刊論文資訊 -NO.2025001- 人工智能在登革熱預防、控制與管理中的作用&#xff1a;一項技術性敘述綜述 The role of artificial intelligence for dengue prevention, control, and management: A technical narrative review 期刊…