網(wǎng)站首頁 編程語言 正文
想在arm的qt上運行websocket,發(fā)現(xiàn)如果沒有移植openssl的話,會報錯
QSslSocket has not been declared
于是準(zhǔn)備openssl的移植和重新編譯arm平臺的qt5.12.9
QT版本是5.12.9 qt-everywhere-src-5.12.9
ubuntu是1604x64
openssl使用openssl-1.1.1m
交叉編譯器是gcc-linaro-4.9.4-2017.01-x84_64_arm-linux-gnueabihf
arm芯片是imx6ull
1.下載openssl1.1.1m
opensssl1.1.1m下載
- 下載后解壓
- cd進(jìn)入openssl目錄
./config --prefix=/home/xxxxxx/openssl/openssl-1.1.1m/desktop-openssl shared zlib-dynamic enable-camellia
make
make install
3.編譯完成后,會在openssl-1.1.1m目錄下出現(xiàn)linux-openssl的文件夾
4.進(jìn)入QT creator 打開一個項目,左側(cè)欄點擊項目,選擇構(gòu)建套件Desktop Qt5.12.9 GCC 64bit下的Run中
5.在出現(xiàn)的Environment中,下拉框選擇 Clean Environment
6.修改LD_LIBRARY_PATH 的value值
7.把剛剛編譯完成的openssl 路徑是 /home/xxxxxx/openssl/openssl-1.1.1m/desktop-openssl/lib 加入到value中,與本來存在的路徑,用 : 分隔開
8.然后把下拉框重新點回 System Environment
9.返回項目文件,點擊重新構(gòu)建,然后左下角運行,發(fā)現(xiàn)websocket能正常運行起來,也沒有報錯了
10.打印下openssl是否已經(jīng)支持
qDebug()<<"QSslSocket="<
ok,ubuntu上已經(jīng)可以正常運行帶openssl的qt程序了
2.重新編譯arm-linux 的qt
1.首先編譯arm版本的openssl
2.進(jìn)入openssl-1.1.1m目錄,輸入指令
./Configure linux-generic32 no-asm shared no-async --prefix=/home/xxxxx/openssl/openssl-1.1.1m/openssl-arm CROSS_COMPILE=/home/xxxxx/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- CC=gcc
make
make install
3.運行完成后,prefix指定的目錄就是arm版的openssl
4.測試一下是否可以在arm芯片上運行
5.把編譯出來的目錄復(fù)制到根文件系統(tǒng),比如把目錄里的文件全部放在usr/lib/openssl下
6.修改 etc/profix文件,加入環(huán)境變量
export LD_LIBRARY_PATH=/opt/openssl/lib:$LD_LIBRARY_PATH
7.修改完成后保存退出,然后刷新環(huán)境變量
source etc/profile
env
8.查看環(huán)境變量是否已經(jīng)加入
9.然后進(jìn)入移植過來的openssl的bin目錄下,并運行測試代碼
cd usr/lib/openssl/bin
./openssl speed rsa2048
10.可以成功運行,說明openssl移植到arm上成功
11.然后需要編譯arm版的帶openssl的qt,進(jìn)入qt-everywhere-src-5.12.9
12.修改autoconfigure.sh文件
1 #!/bin/sh
2
3 OPENSSL_LIBS='-L/home/prophet/openssl/openssl-1.1.1m/openssl-arm/lib -lssl -lcrypto' \
4 ./configure -prefix /home/prophet/qt_file/qt-everywhere-src-5.12.9/arm-qt-openssl \
5 -openssl-linked \
6 -I/home/prophet/openssl/openssl-1.1.1m/openssl-arm/include \
7 -L'/home/prophet/openssl/openssl-1.1.1m/openssl-arm/lib -Wl,-rpath=/home/prophet/openssl/openssl-1.1.1m/openssl-a rm/lib' \
8 -opensource \
9 -confirm-license \
10 -release \
11 -strip \
12 -shared \
13 -xplatform linux-arm-gnueabi-g++ \
14 -optimized-qmake \
15 -c++std c++11 \
16 --rpath=no \
17 -pch \
18 -skip qt3d \
19 -skip qtactiveqt \
20 -skip qtandroidextras \
21 -skip qtcanvas3d \
22 -skip qtconnectivity \
23 -skip qtdatavis3d \
24 -skip qtdoc \
25 -skip qtgamepad \
26 -skip qtlocation \
27 -skip qtmacextras \
28 -skip qtnetworkauth \
29 -skip qtpurchasing \
30 -skip qtremoteobjects \
31 -skip qtscript \
32 -skip qtscxml \
33 -skip qtsensors \
34 -skip qtspeech \
35 -skip qtsvg \
36 -skip qttools \
37 -skip qttranslations \
38 -skip qtwayland \
39 -skip qtwebengine \
40 -skip qtwebview \
41 -skip qtwinextras \
42 -skip qtx11extras \
43 -skip qtxmlpatterns \
44 -make libs \
45 -make examples \
46 -nomake tools -nomake tests \
47 -gui \
48 -widgets \
49 -dbus-runtime \
50 --glib=no \
51 --iconv=no \
52 --pcre=qt \
53 --zlib=qt \
54 --freetype=qt \
55 --harfbuzz=qt \
56 -no-opengl \
57 -linuxfb \
58 --xcb=no \
59 -tslib \
60 --libpng=qt \
61 --libjpeg=qt \
62 --sqlite=qt \
63 -plugin-sql-sqlite \
64 -I/home/prophet/qt_file/tslib/arm-tslib/include \
65 -L/home/prophet/qt_file/tslib/arm-tslib/lib \
66 -recheck-all
13.保存退出后,運行autoconfigure.sh
14.根據(jù)打印的信息可以看到openssl是yes了
15.然后開始編譯
make -j4
make install
16.運行完成后 在-prefix指定的地方,出現(xiàn)編譯好的arm-linux的qt的文件夾
把這個文件夾,放在根文件系統(tǒng)的usr/lib中
17.然后修改 etc/profile 文件
18.把之前QT_ROOT 的指向,修改成新編譯的帶openssl的armqt文件夾
19.保存后重新執(zhí)行下profile文件
source etc/profile
env
20.回到QT creator 加入新的kits
21.在Qt version下,加入新編譯的帶openssl版本的qt
22.然后再kits下,加入新的kits,只是改變了Qt version
23.新增完成后,把項目用新的構(gòu)建套件重新構(gòu)建
24.發(fā)現(xiàn)還是存在報錯
25.找不到libssl.so和libcrypto.so
26.在項目的pro文件,加入一行,也就是arm版本的openssl
LIBS += -L/home/prophet/openssl/openssl-1.1.1m/openssl-arm/lib/ -lcrypto -lssl
27.再次構(gòu)建項目,發(fā)現(xiàn)沒有任何報錯了,編譯后,把應(yīng)用程序發(fā)到根文件系統(tǒng)上
28.運行應(yīng)用程序
29.websocket也可以正常運行了
30.打印的openssl支持,也是true
在ubuntu上qt creator 如果要在desktop上構(gòu)建調(diào)試的話,需要把pro文件中加入的那行代碼注釋掉 否則會報錯
//LIBS += -L/home/prophet/openssl/openssl-1.1.1m/openssl-arm/lib/ -lcrypto -lssl
原文鏈接:https://blog.csdn.net/prophet23/article/details/122454238
- 上一篇:自定義注解+Spel實現(xiàn)分布式鎖
- 下一篇:Number精度超了如何解決
相關(guān)推薦
- 2022-05-10 VSCode中 “Error:Can‘t find Python executable “pytho
- 2022-07-02 python?np.arange?步長0.1的問題需要特別注意_python
- 2022-05-27 Jmeter如何使用BeanShell取樣器調(diào)用Python腳本_python
- 2022-06-06 delete from xx_table(刪除全表數(shù)據(jù))對應(yīng)的binlog是怎么記錄的?
- 2022-09-24 基于Pytorch實現(xiàn)邏輯回歸_python
- 2022-05-25 Docker?compose配置文件寫法及命令使用示例_docker
- 2022-04-05 python將列表轉(zhuǎn)換為字符串(含有引號,用逗號間隔)
- 2022-08-04 python連接FTP服務(wù)器的實現(xiàn)方法_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支