arm-linux使用qt开发并加入openssl

2 篇文章 0 订阅
1 篇文章 0 订阅

想在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
以下是在 Ubuntu 18.04 操作系统下,使用 gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf 交叉编译 Qt 5.6.2 的流程: 1. 下载 gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf 工具链,并解压到某个目录下。 2. 安装 Qt 5.6.2 的依赖库: ``` sudo apt-get update sudo apt-get install build-essential perl python git sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxslt1-dev libgl1-mesa-dev libglu1-mesa-dev libsqlite3-dev libmysqlclient-dev libpq-dev libiodbc2-dev libasound2-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev libxrandr-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev libgstreamer-plugins-ugly1.0-dev gstreamer1.0-libav gstreamer1.0-alsa gstreamer1.0-pulseaudio libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-bad1.0-dev libgstreamer-plugins-ugly1.0-dev ``` 3. 下载 Qt 5.6.2 的源代码,并解压到某个目录下。 4. 进入 Qt 5.6.2 的源代码目录,执行以下命令: ``` ./configure -release -opengl es2 -device linux-rasp-pi2-g++ -device-option CROSS_COMPILE=/path/to/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot /path/to/sysroot -opensource -confirm-license -make libs -prefix /usr/local/qt5arm -no-xcb -no-pch -no-icu -no-gif -no-libjpeg -no-libpng -no-harfbuzz -no-openssl -no-qml-debug -nomake examples -nomake tests ``` 其中,/path/to/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf 是 gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf 工具链的路径,/path/to/sysroot 是交叉编译环境的根文件系统路径。 5. 执行 make 命令进行编译: ``` make -j4 ``` 其中,-j4 表示使用 4 个线程进行编译。 6. 执行 make install 命令进行安装: ``` sudo make install ``` 7. 完成后,在 /usr/local/qt5arm 目录下会生成 Qt 5.6.2 的安装文件。把该目录添加到交叉编译环境的 PATH 环境变量中即可使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值