想在arm的qt上运行websocket,发现如果没有移植openssl的话,会报错

QSslSocket has not been declared

于是准备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下载

  1. 下载后解压
  2. cd进入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目录下出现linux-openssl的文件夹

4.进入QT creator 打开一个项目,左侧栏点击项目,选择构建套件Desktop Qt5.12.9 GCC 64bit下的Run中

在这里插入图片描述

5.在出现的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.返回项目文件,点击重新构建,然后左下角运行,发现websocket能正常运行起来,也没有报错了

10.打印下openssl是否已经支持

qDebug()<<"QSslSocket="<<QSslSocket::sslLibraryBuildVersionString();
qDebug() << "OpenSSL支持情况:" << QSslSocket::supportsSsl();

在这里插入图片描述
ok,ubuntu上已经可以正常运行带openssl的qt程序了


2.重新编译arm-linux 的qt

1.首先编译arm版本的openssl
2.进入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.把编译出来的目录复制到根文件系统,比如把目录里的文件全部放在usr/lib/openssl下

6.修改 etc/profix文件,加入环境变量

export LD_LIBRARY_PATH=/opt/openssl/lib:$LD_LIBRARY_PATH

7.修改完成后保存退出,然后刷新环境变量

source etc/profile
env

8.查看环境变量是否已经加入

9.然后进入移植过来的openssl的bin目录下,并运行测试代码

cd usr/lib/openssl/bin
./openssl speed rsa2048

在这里插入图片描述
10.可以成功运行,说明openssl移植到arm上成功

11.然后需要编译arm版的带openssl的qt,进入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.根据打印的信息可以看到openssl是yes了
在这里插入图片描述
15.然后开始编译

make -j4
make install

16.运行完成后 在-prefix指定的地方,出现编译好的arm-linux的qt的文件夹

把这个文件夹,放在根文件系统的usr/lib中

17.然后修改 etc/profile 文件
18.把之前QT_ROOT 的指向,修改成新编译的带openssl的armqt文件夹

在这里插入图片描述
19.保存后重新执行下profile文件
source etc/profile
env

20.回到QT creator 加入新的kits

21.在Qt version下,加入新编译的带openssl版本的qt
在这里插入图片描述
22.然后再kits下,加入新的kits,只是改变了Qt version
在这里插入图片描述
23.新增完成后,把项目用新的构建套件重新构建
在这里插入图片描述
24.发现还是存在报错
在这里插入图片描述

25.找不到libssl.so和libcrypto.so

26.在项目的pro文件,加入一行,也就是arm版本的openssl

LIBS  += -L/home/prophet/openssl/openssl-1.1.1m/openssl-arm/lib/ -lcrypto -lssl

在这里插入图片描述

27.再次构建项目,发现没有任何报错了,编译后,把应用程序发到根文件系统上
28.运行应用程序
29.websocket也可以正常运行了

30.打印的openssl支持,也是true
在这里插入图片描述


在ubuntu上qt creator 如果要在desktop上构建调试的话,需要把pro文件中加入的那行代码注释掉 否则会报错
//LIBS  += -L/home/prophet/openssl/openssl-1.1.1m/openssl-arm/lib/ -lcrypto -lssl
Logo

更多推荐