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 <andy@warmcat.com>
#
# 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

等待终端运行结束;

不出意外交叉编译就顺利结束了。以上方法亲测可行。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐