如何对 Neuron 源码进行交叉编译

本文详细介绍如何使用Neuron源码进行交叉编译,包括安装编译器、配置CMakeLists.txt文件、编译依赖库等步骤,帮助用户在不同架构平台上运行Neuron。

Neuron 是一款开源的轻量级工业协议网关软件,支持数十种工业协议的一站式设备连接、数据接入、MQTT 协议转换,为工业设备赋予工业 4.0 时代关键的物联网连接能力。

开源社区用户有时会有使用 Neuron 源码在当前编译平台下编译能够运行在体系结构不同的另一种目标平台上,即进行交叉编译的需求。在这一过程中可能会遇到由于没有安装好依赖库等原因导致的编译错误。

本文将详细介绍使用 Neuron 源码进行交叉编译的操作步骤,帮助用户更好地利用 Neuron 进行进一步的工业物联网业务开发。

Neuron 源码下载:

$ git clone https://github.com/emqx/neuron
$ cd neuron
$ git submodule update --init
$ mkdir build && cd build

什么是交叉编译

交叉编译,可以理解为在当前编译平台下,编译出能够运行在体系结构不同的另一种目标平台上的可执行程序的过程,经常用于目标平台无法运行编译所需的编译器的情况。

交叉编译需要用到交叉编译链。交叉编译链是为了编译跨平台体系结构的程序代码而形成的由多个子工具构成的一套完整的工具集。当指定了源文件(.c)时,它会自动按照编译流程调用不同的子工具,自动生成可执行文件。交叉编译链的重点在于交叉编译器,使用不同平台的编译器用来生成可在该平台运行的可执行程序。所有语句都写在跨平台编译工具 CMake 所依赖的规则文件 CMakeLists.txt 中,用于构建整个工程。

Neuron 的交叉编译流程

下面我们以 X86_64 架构平台下编译出可运行于 armv7l 架构的可执行程序为例,介绍对 Neuron 源码进行交叉编译的具体操作。

安装编译器

执行以下指令安装适用于 armv7l 架构的编译器。

$ sudo apt-get update
$ sudo apt-get install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf pkg-config libtool alien unzip

编写 .cmake 文件

.cmake 文件用于配置 cmake 的变量和属性。

# 目标系统名称
set(CMAKE_SYSTEM_NAME Linux)
set(COMPILER_PREFIX arm-linux-gnueabihf)
# 目标平台架构
set(CMAKE_SYSTEM_PROCESSOR armv7l)
# 库的目录
set(LIBRARY_DIR /opt/externs/libs)

# 语言编译器
set(CMAKE_C_COMPILER ${COMPILER_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${COMPILER_PREFIX}-g++)

# 静态库的归档工具名称
set(CMAKE_AR ${COMPILER_PREFIX}-ar)
set(CMAKE_LINKER ${COMPILER_PREFIX}-ld)
set(CMAKE_NM ${COMPILER_PREFIX}-nm)
set(CMAKE_OBJDUMP ${COMPILER_PREFIX}-objdump)
# 静态库随机化工具名称
set(CMAKE_RANLIB ${COMPILER_PREFIX}-ranlib)
# CMAKE_STAGING_PREFIX 变量用于指定安装到主机的路经
set(CMAKE_STAGING_PREFIX ${LIBRARY_DIR}/${COMPILER_PREFIX})
# CMAKE_PREFIX_PATH 变量用于指定要编译的文件所在的安装位置
set(CMAKE_PREFIX_PATH ${CMAKE_STAGING_PREFIX})

include_directories(SYSTEM ${CMAKE_STAGING_PREFIX}/include)
include_directories(SYSTEM ${CMAKE_STAGING_PREFIX}/openssl/include)
# 指定交叉编译环境
set(CMAKE_FIND_ROOT_PATH ${CMAKE_STAGING_PREFIX})
# 从来不在指定目录下查找工具程序
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# 只在指定目录下查找库文件
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
# 只在指定目录下查头文件
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
link_directories(${CMAKE_STAGING_PREFIX})

编写 CMakeLists.txt 文件

基础配置及参数配置如下:


                
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值