arm-linux使用qt开发并加入openssl_prophet23的博客-程序员ITS304_arm-linux qt

技术标签: QT  qt  openssl  linux  arm-linux  arm  

想在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
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/prophet23/article/details/122454238

智能推荐

IDEA报错:log4j:WARN No appenders could be found for logger (org.mybatis.generator.internal.db.Databas)_cici未完成的拼图的博客-程序员ITS304

报错信息:log4j:WARN No appenders could be found for logger (org.mybatis.generator.internal.db.DatabaseIntrospector).log4j:WARN Please initialize the log4j system properly.log4j:WARN See http://logging...

Vue 模板是如何编译的_前端同学的博客-程序员ITS304_vue模板编译

认识模板编译我们知道 &lt;template&gt;&lt;/template&gt; 这个是模板,不是真实的 HTML,浏览器是不认识模板的,所以我们需要把它编译成浏览器认识的原生的 HTML这一块的主要流程就是提取出模板中的原生 HTML 和非原生 HTML,比如绑定的属性、事件、指令等等经过一些处理生成 render 函数render 函数再将模板内容生成对应的 vnode再经过 patch 过程( Diff )得到要渲染到视图中的 vnode最后根据 vnode 创建真实的 DOM

sota结果是什么意思_只有达到SOTA的方法才能发文章吗_weixin_39743369的博客-程序员ITS304

最近关注了一个问题:只有达到 state of the art 精度的方法才能发文章吗?得赞同最多的回答分享了ICML审稿人的话,说的非常好:The academic is not an army race. It does not really matter how fancy the model is. It does not really matter whether the model c...

浙江工商大学和杭电计算机哪个好,浙江工业大学、杭电、浙江理工大学、浙江工商大学哪所值得报考?..._Clarlie的博客-程序员ITS304

有人问,浙江工业大学、杭州电子科技大学、浙江工商大学和浙江理工大学,哪个学校更值得选择?这4所大学都是浙江省的普通高校。不过,这几所大学的实力并不太弱,也许要好于部分211大学。原因是,浙江的高等教育跟它的教育强省地位不符合。浙江只有浙大一所985兼211大学。在双一流名单里,也只有3所学校上榜,除了浙大,还有宁波大学和中国美术学院。中国美院实力很强,但属于艺术类学校,对大部分考生不适合。综合性院...

[SPI]SPI协议详解_weixin_30539625的博客-程序员ITS304

转自:https://my.oschina.net/freeblues/blog/674001.SPI协议简介1.1.SPI协议概括  SPI,是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信...

JDK、JRE和JVM之间的关系_Sun-yz的博客-程序员ITS304_jdk jre jvm三者之间的关系

作为一个Java开发者,只会用Java,却不知什么是JDK、JRE和JVM是什么,以及他们之间有什么联系。本文总结了JDK,JRE,JVM三者的关系与区别。JDK、JRE和JVM之间的关系一、JDK二、JRE三、JVM四、三者的联系五、三者的区别六、总结一、JDKJDK是Java开发工具包,其中包括编译工具(javac.exe)打包工具(jar.exe)等,也包括JRE。在JDK的安装目录下有一个jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工.

随便推点

SpringBoot接口返回图片_前端的哭的博客-程序员ITS304_springboot 返回图片

使用 ResponseEntity 返回结果,设置HttpHeader中的content-type,如:image/[email protected](method = RequestMethod.GET)public ResponseEntity getFile(@RequestParam long id) { Result result = fileService.getFile(id); if (result.getCode() == 1) { MediaTy..

Stata:聚类标准误的纠结_arlionn的博客-程序员ITS304_聚类标准误

全文阅读:Stata:聚类标准误的纠结| 连享会主页目录1.背景介绍 1.1 聚类还是不聚类,这是一个问题 1.2 如果本应该聚类,但没有聚类会怎样 2.实操准备 2.1 模拟设置 2.2 主要程序 3. 主要结果 3.1 不同情况下的结果对比 3.2 基本结论 4.参考资料 5. 相关推文 本文主要编译自下文:Source:To cluster or not to cluster 1.背景介绍1.1 聚类还是不聚类,这是一个问题.

【Unity3d】用RenderTexture实现粘液拖尾_新媒体的博客-程序员ITS304_unity 粘液

利用Render Texture可以模拟实现影子,同样的使用Render Texture也可以实现虫子等物体经过时在其他物体上留下的粘液痕迹效果(别问我为什么要做这么恶心的东西,罪恶之源是teamlab,模仿的这个团队做的一个效果)。首先在物体正上方新建一个摄像机负责观察物体截取RenderTexture,这里使用了之前讲过的透明窗体的脚本将物体以外的画面颜色抠掉。使用方法见【Unity3d】窗体透

Eclipse下NDK开发与调试_dj0379的博客-程序员ITS304

Eclipse下NDK开发一、关于NDK:NDK全称:Native Development Kit。 1、NDK是一系列工具的集合。 NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和Java应用一起打包成apk。这些工具对开发者的帮助是巨大的。 NDK集成了交叉编译器,并提供了相应的mk文件隔离CPU、平台、ABI等差异,开发人员只需要简

路由器ping自身接口ping不通的解决过程_weixin_33713707的博客-程序员ITS304

这是我解决在一次实验时,解决路由器ping不通自身接口的过程。 转载于:https://blog.51cto.com/hutiansheng/232537

2021-07-15_sinat_29805979的博客-程序员ITS304

PYQT的使用:一、PYQT的环境搭建:系统环境:centos7开发环境:PYQT5.6学习时间:提示:这里可以添加计划学习的时间例如:1、 周一至周五晚上 7 点—晚上9点2、 周六上午 9 点-上午 11 点3、 周日下午 3 点-下午 6 点学习产出:提示:这里统计学习计划的总量例如:1、 技术笔记 2 遍2、CSDN 技术博客 3 篇3、 学习的 vlog 视频 1 个...