libwebsockets交叉编译全流程

news/2025/2/24 5:49:50

libwebsocket中的webscoket加密功能需要依赖于Openssl库因此需要提前准备好openssl开源库。

交叉编译openssl

下面演示源码方式交叉编译OpenSSL为动态库。

创建个Websocket文件夹,把后续的成果物均放在这个文件中,文件夹中创建子文件夹OpenSSL和libWebsockets用于分别存放后续编译的成果物头文件和动态库静态库方便后续其他文件引用。

然后压缩OpenSSL文件,解压后的目录层级如下

进入到openssl-1.1.1t目录中

查看之前建好的用于存放Openssl成果物的路径,复制下来

进入openssl编译路径

配置编辑参数

no-asm: 在交叉编译过程中不使用汇编代码代码加速编译过程;

shared: 生成动态连接库。

 no-async: 交叉编译工具链没有提供GNU C的ucontext库

--prefix=: 安装路径

--cross-compile-prefix=: 交叉编译工具

输入如下命令

./config no-asm shared no-async --prefix=/data1/shenhao11/WebScoketDemo/Websockets/Openssl --cross-compile-prefix=arm-ca9-linux-gnueabihf-

配置成功后显示如下画面,同时目录下生成Makefile文件

打开生成的Makefile文件,删除其中的-m64和-m32选项

删除后

删除后不能忘记要添加交叉编译的环境变量,否则后续编译可能会出错

export LD_LIBRARY_PATH=`dirname $(dirname $(which arm-ca9-linux-gnueabihf-gcc))`/usr/local/lib

然后再当前目录,执行make 命令开始编译

编译成功后 执行make install 进行安装

安装完成后显示如下

同时在我们的成果物路径下生成如下文件

可以看到lib目录下生成了交叉编译后的我们需要的openssl的动态库

交叉编译libwebsockets-main

然后我们开始交叉编译libwebsockets-main

先解压该文件,解压后进入该文件目录

创建build目录

进入build

执行cmake命令

cmake 参数说明:

            -DCMAKE_SYSTEM_NAME                  指定系统为Linux

            -DCMAKE_C_COMPILER                   指定C语言编译器如交叉编译器未加入到环境变量,需要使用绝对路径

            -DCMAKE_CXX_COMPILER                 指定c++编译器

            -DLWS_OPENSSL_INCLUDE_DIRS               指定Openssl头文件目录

            -DLWS_OPENSSL_LIBRARIES                   指定Openssl动态库路径        

cmake         -DCMAKE_SYSTEM_NAME=Linux  \

                     -DCMAKE_C_COMPILER=arm-ca9-linux-gnueabihf-gcc  \

            -DCMAKE_CXX_COMPILER=arm-ca9-linux-gnueabihf-g++  \

            -DLWS_OPENSSL_INCLUDE_DIRS=/data1/shenhao11/WebScoketDemo/Websockets/Openssl/include \

            -DLWS_OPENSSL_LIBRARIES="/data1/shenhao11/WebScoketDemo/Websockets/Openssl/lib/libssl.so;//data1/shenhao11/WebScoketDemo/Websockets/Openssl/lib/libcrypto.so" ..

注意最后还有.. 意思是根据执行上一级目录下的CMakeList来执行cmake 

cmake完成后如下所示

会在build目录下生成一堆文件和Makefile文件

我们打开cmake_install.cmake文件

修改这个参数路径为之前创建的成果物路径

修改前:

将成果物路径复制下,修改指定路径

将安装路径修改为该路径,修改后:

然后再当前目录执行make开始编译

make后的界面如下

同时会在build目录中的bin目录下生成可执行的测试demo

最后执行make install 进行安装 将成果物拷贝到之前创建好的路径中

可打开成果物路径查看


http://www.niftyadmin.cn/n/5863997.html

相关文章

TIKTOK矩阵系统的软件服务

TikTok矩阵系统的技术服务概述 随着TikTok平台的发展,越来越多的内容创作者和企业选择通过矩阵系统来优化他们的内容管理和推广。TikTok矩阵系统是一种旨在高效管理多个账户、提升内容曝光、增强互动和加速推广的技术工具。以下是该系统提供的主要功能和技术服务&a…

jmeter 与大数据生态圈中的服务进行集成

以下为你详细介绍 JMeter 与大数据生态圈中几种常见服务(Hadoop HDFS、Spark、Kafka、Elasticsearch)集成的方法: 与 Hadoop HDFS 集成 实现思路 HDFS 是 Hadoop 的分布式文件系统,JMeter 可模拟客户端对 HDFS 进行文件读写操作…

云原生(五十七) | 阿里云CDN基本概念

文章目录 阿里云CDN基本概念 一、阿里云CDN概述 二、为什么选择阿里云CDN 三、阿里云CDN应用场景 四、总结 阿里云CDN基本概念 一、阿里云CDN概述 阿里云内容分发网络CDN是建立并覆盖在承载网之上,由遍布全球的边缘节点服务器群组成的分布式网络。阿 里云CDN…

Hadoop常用操作命令

在NameNode节点格式化集群 初始化集群 hdfs namenode -format启动HDFS sbin/start-dfs.sh启动yarn sbin/start-yarn.sh启动NodeManager yarn-daemon.sh start nodemanager启动DataNode hadoop-daemon.sh start datanode启动SecondaryNameNode hadoop-daemon.sh start se…

jmeter 接入deepseek 或者chatgpt

接入ChatGPT 实现思路 要将JMeter与ChatGPT接入,核心在于通过JMeter发送HTTP请求至OpenAI的API接口,以此调用ChatGPT进行交互。整个过程包含创建JMeter测试计划、添加必要组件、配置请求参数以及处理响应结果等步骤。 具体步骤 1. 获取OpenAI API密钥…

Android构建系统 - 01 环境准备

Android 构建系统的组成 Android构建系统由python,gn,ninja,makefile这几部分组成。 **python**∶做好编译前的准备工作和为 gn 收集命令参数。胶水语言,最擅长的是对参数,环境变量,文件操作。 gn∶类似构…

PyTorch 源码学习:GPU 内存管理之它山之石——TensorFlow BFC 算法

TensorFlow 和 PyTorch 都是常用的深度学习框架,各自有一套独特但又相似的 GPU 内存管理机制(BFC 算法)。它山之石可以攻玉。了解 TensorFlow 的 BFC 算法有助于学习 PyTorch 管理 GPU 内存的精妙之处。本文重点关注 TensorFlow BFC 算法的核…

Spring Boot集成Redis + Lua脚本实现原子性操作:小白入门指南

Spring Boot集成Redis Lua脚本实现原子性操作:小白入门指南 一、为什么需要Lua脚本? 在分布式系统中,多个Redis命令的组合操作(如先查询后修改)可能因网络延迟、并发竞争导致数据不一致。Lua脚本可以将多个命令封装…