Libwebsockets的交叉编译
作者:互联网
关键词:
libwebsockets
cmake
ARM平台
摘要:
本案例主要是介绍了如何在ubuntu平台下交叉编译出目标平台是ARM平台的libwebsockets库。通过修改CMake脚本一步步的编译出目标平台上的库文件。
1 案例描述
Libwebsockets库是一个开源的websocket组件,源码是用c语言编写的,组件中是通过cmake脚本来生成makefile脚本,再通过make来编译出目标文件,我们需要在嵌入式的arm平台中跑这个库,那么就需要改造下cmake脚本来交叉编译。
2 websocket协议的简单介绍
WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。
WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
(此简介参考维基百科)
我们项目中主要考虑到了客户端和服务端都需要主动推送消息,所以选择了websocket协议。
3.libwebsockets的交叉编译
前端协议层使用的都是C的源码,在网上搜索之后,发现libwebsockets是一个比较灵活、轻量级的库,而且能满足信令上的交互,所以我们选择了这个库作为我们项目中websocket的组件。
3.1 Cmake交叉编译配置: CMakeLists.txt
首先找到cmake的入口配置的脚本:下图中为cmake脚本的配置项,option后面的选项如果不需要可以修改成OFF,这次的编译则去掉了ssl的依赖。单交叉编译一个libwebsockets库,有依赖库的情况下需要把依赖库也交叉编译完,并指定依赖库的位置。
3.2 交叉编译需要修改CmakeLists.txt脚本
在脚本中加入:
1 # 设置交叉编译 ----------------------------------------------- 2 # CMAKE_SYSTEM_NAME:指定目标机所在的操作系统名称,只有当该变量被设置了,CMake才认为此时正值交叉编译 3 # CMAKE_FIND_ROOT_PATH:代表一系列的相关文件夹路径的根路径的变更,所有的Find_***.cmake脚本首先会在这个路径的usr/lib,lib目录下找,然后才会去系统的目录下找。可以指定多个路径 4 # CMAKE_FIND_ROOT_PATH_MODE_PROGRAM:有三种取值:NEVER,ONLY,BOTH ,这边选NEVER表示不在当前机器的系统目录下查找,而是去宿主机查找 5 # CMAKE_FIND_ROOT_PATH_MODE_LIBRARY:选ONLY表示依赖库只在交叉编译环境中找 6 # CMAKE_FIND_ROOT_PATH_MODE_INCLUDE:表示依赖的头文件只在交叉编译环境中找 7 # CMAKE_C_COMPILER CMAKE_CXX_COMPILE:指定交叉编译链gcc和g++ 8 9 SET(CMAKE_SYSTEM_NAME Linux) 10 SET(CMAKE_FIND_ROOT_PATH "/opt/arm/gcc/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/") 11 SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) 12 SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) 13 SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) 14 SET(CMAKE_C_COMPILER "/opt/arm/gcc/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-gcc") 15 SET(CMAKE_CXX_COMPILE "/opt/arm/gcc/gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-g++") 16 # ------------------------------------------------------------
根据自己的需要,修改完option选项以及加上交叉编译修改的参数之后 ,就可以通过cmake命令来生成编译脚本了:
3.3 用于指定安装路径的cmake 指令:
1 $ cmake ../ -DCMAKE_INSTALL_PREFIX=/opt/arm/lib/libwebsockets
下图是通过cmake命令生成的makefile脚本
3.4 make编译
1 $ make -j8
3.5 库的安装:
1 $ sudo make install
3.6 查看库的系统架构
通过readelf查看下编译的库是否正确:
1 $ readelf -h libwebsockets.so
目标平台是ARM的,到了这一步就差不多能确定是交叉编译成功了。
标签:cmake,交叉,FIND,编译,Libwebsockets,CMAKE,arm 来源: https://www.cnblogs.com/huanliu/p/16052852.html