1.因为项目需要在板上通过websocket协议配合web服务,需要交叉编译ARM64架构的libwebsockets;
用的是libwebsockets-v4.1.5,openSSL版本openssl-1.0.2u;(由于之前版本不匹配导致交叉编译失败很多次,这个组合保证兼容性)
(1)下载libwebsockets和openSSL正确版本;
(2)优先编译openSSL
#cd进解压目录
cd /openssl-1.0.2u
#配置交叉编译器
./Configure linux-aarch64 --prefix=/home/sun/Desktop/VScode/openssl/path --cross-compile-prefix=/opt/toolchain/7.5.0/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
#预编译
make
#安装
make install
(3)编译libwebsockets
#cd 进解压文件夹
cd /libwebsockets-v4.1.5
#建个build
mkdir build
cd build
需要配置cmakelist.txt
# 设置安装目录
SET(CMAKE_INSTALL_PREFIX /home/sun/Desktop/VScode/arm-libwebsockets/path)
# 设置系统名称
SET(CMAKE_SYSTEM_NAME Linux)
# 设置交叉编译工具链的路径
SET(CMAKE_FIND_ROOT_PATH "/opt/toolchain/7.5.0/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/")
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# 设置交叉编译器的路径
SET(CMAKE_C_COMPILER "/opt/toolchain/7.5.0/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc")
SET(CMAKE_CXX_COMPILER "/opt/toolchain/7.5.0/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++")
# 指定 OpenSSL 的包含目录和库目录
# 如果需要使用 OpenSSL,请取消注释以下两行并设置正确的路径
SET(LWS_OPENSSL_INCLUDE_DIRS /home/sun/Desktop/VScode/openssl/path/include)
SET(LWS_OPENSSL_LIBRARIES /home/sun/Desktop/VScode/openssl/path/lib)
# 如果不需要 OpenSSL,请使用以下行禁用 OpenSSL
SET(LWS_WITH_SSL ON)
# 如果需要使用内置的 SHA-1 支持,请取消注释以下行
# SET(LWS_WITHOUT_BUILTIN_SHA1 OFF)
如果不需要ssl就改成OFF
复制到cmakelist.txt这里
#
# libwebsockets - small server side websockets and web server implementation
#
# Copyright (C) 2010 - 2020 Andy Green
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to
# deal in the Software without restriction, including without limitation the
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
# sell copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
#
cmake_minimum_required(VERSION 2.8.12)
include(CheckFunctionExists)
include(CheckSymbolExists)
include(CheckIncludeFile)
include(CheckIncludeFiles)
include(CheckLibraryExists)
include(CheckTypeSize)
include(CheckCSourceCompiles)
# 设置安装目录
SET(CMAKE_INSTALL_PREFIX /home/sun/Desktop/VScode/arm-libwebsockets/path)
# 设置系统名称
SET(CMAKE_SYSTEM_NAME Linux)
# 设置交叉编译工具链的路径
SET(CMAKE_FIND_ROOT_PATH "/opt/toolchain/7.5.0/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/")
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# 设置交叉编译器的路径
SET(CMAKE_C_COMPILER "/opt/toolchain/7.5.0/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc")
SET(CMAKE_CXX_COMPILER "/opt/toolchain/7.5.0/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++")
# 指定 OpenSSL 的包含目录和库目录
# 如果需要使用 OpenSSL,请取消注释以下两行并设置正确的路径
SET(LWS_OPENSSL_INCLUDE_DIRS /home/sun/Desktop/VScode/openssl/path/include)
SET(LWS_OPENSSL_LIBRARIES /home/sun/Desktop/VScode/openssl/path/lib)
# 如果不需要 OpenSSL,请使用以下行禁用 OpenSSL
SET(LWS_WITH_SSL ON)
# 如果需要使用内置的 SHA-1 支持,请取消注释以下行
# SET(LWS_WITHOUT_BUILTIN_SHA1 OFF)
# 在这里可以添加项目的其他配置和目标声明
if (POLICY CMP0048)
cmake_policy(SET CMP0048 NEW)
endif()
#if (POLICY CMP0024)
# cmake_policy(SET CMP0024 NEW)
#endif()
if (POLICY CMP0075)
cmake_policy(SET CMP0075 NEW)
endif()
# General Advice
#
# For selecting between DEBUG / RELEASE, use -DCMAKE_BUILD_TYPE=DEBUG or =RELEASE
# debug builds include source level debug info and extra logging
set(LWS_WITH_BUNDLED_ZLIB_DEFAULT OFF)
if(WIN32)
set(LWS_WITH_BUNDLED_ZLIB_DEFAULT ON)
(省略.......)
保存cmakelist.txt
#预编译
make
#安装
make install
等待终端运行结束;
不出意外交叉编译就顺利结束了。以上方法亲测可行。
精彩内容
发表评论