arm-linux使用qt开发并加入openssl
想在arm的qt上运行websocket,发现如果没有移植openssl的话,会报错QSslSocket has not been declared于是准备openssl的移植和重新编译arm平台的qt5.12.9QT版本是5.12.9 qt-everywhere-src-5.12.9ubuntu是1604x64openssl使用openssl-1.1.1m交叉编译器是gcc-linaro-4.9
想在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
- 下载后解压
- 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
更多推荐
所有评论(0)