【跨平台编译】【树莓派】在x86上编译树莓派上运行的C&C++代码,搭建树莓派4B的跨平台编译环境

在嵌入式平台如树莓派、国产SoC上开发C++应用,远程登录树莓派修改代码、编译比较低效,笔者调研跨平台编译技术、调试CMAKE最终实现了在x86系统上编译出树莓派4B可运行的二进制可执行文件。

基本环境

  • 本地是Ubuntu20.04,x86系统。
  • 树莓派硬件是4B,Ubuntu24.04,aarch64系统。

实现方法

参考博客https://blog.youkuaiyun.com/baimei4833953/article/details/114595197 给出的方法,使用raspberrypi的官方库,发现无法运行,分析参考给出的是面向32位的ARM,而树莓派4B是64位的,尝试修改为修改toolchain类型
报错,暂搁置。

看该tools的readme,称该工程已经过时了,建议直接apt安装目标编译器,

sudo apt-get install gcc-aarch64-linux-gnu
sudo apt-get install g++-aarch64-linux-gnu

注意下面cmake中gcc-aarch64、g++aarch64路径/usb/bin要匹配实际位置。

实测可用的cmake配置

# 设置目标系统名称
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)

# 设置交叉编译器
set(TOOLCHAIN_PREFIX aarch64-linux-gnu)

# 指定工具链路径(根据实际安装路径修改)
set(TOOLCHAIN_PATH  /usr/bin)

# 设置编译器
set(CMAKE_C_COMPILER ${TOOLCHAIN_PATH}/${TOOLCHAIN_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_PATH}/${TOOLCHAIN_PREFIX}-g++)
set(CMAKE_AR ${TOOLCHAIN_PATH}/${TOOLCHAIN_PREFIX}-ar)
set(CMAKE_LINKER ${TOOLCHAIN_PATH}/${TOOLCHAIN_PREFIX}-ld)
set(CMAKE_NM ${TOOLCHAIN_PATH}/${TOOLCHAIN_PREFIX}-nm)
set(CMAKE_OBJCOPY ${TOOLCHAIN_PATH}/${TOOLCHAIN_PREFIX}-objcopy)
set(CMAKE_OBJDUMP ${TOOLCHAIN_PATH}/${TOOLCHAIN_PREFIX}-objdump)
set(CMAKE_STRIP ${TOOLCHAIN_PATH}/${TOOLCHAIN_PREFIX}-strip)
set(CMAKE_RANLIB ${TOOLCHAIN_PATH}/${TOOLCHAIN_PREFIX}-ranlib)

# 设置系统根目录(从树莓派复制的文件系统)
set(CMAKE_FIND_ROOT_PATH ~/rpi-rootfs)

# 只在根目录中查找库和头文件
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_FIND_ROOT_PATH_MODE_PACKAGE ONLY)

set(CMAKE_C_FLAGS "-march=armv8-a" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS "-march=armv8-a" CACHE STRING "" FORCE)

将上述cmake保存为ras64.cmake文件,
进入工程代码,

cmake .. -DCMAKE_TOOLCHAIN_FILE=/<路径>/ras64.cmake 
make

相关命令

#查看系统架构
uname -m
#查看CPU类型
dpkg --print-architecture
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值