Debian10x86搭建树莓派4B arm32的cmake交叉编译环境

xingyun86 2021-3-2 1041

Debian10x86搭建树莓派4B arm32的cmake交叉编译环境

1.安装vmware

2.vmware安装Debian10x86虚拟机

配置阿里云源加速

3.下载树莓派原版os

4.下载qemu

5.安装qemu并配置树莓派OS

6.下载sysroot

两种方式:

a.从树莓派OS直接拷贝出sysroot

rsync -avz pi@192.168.0.105:/lib sysroot
rsync -avz pi@192.168.0.105:/usr/include sysroot/usr
rsync -avz pi@192.168.0.105:/usr/lib sysroot/usr
rsync -avz pi@192.168.0.105:/opt/vc sysroot/opt

b.直接下载

从https://gnutoolchains.com/raspberry/下载raspberry-gcc8.3.0-r3.exe,安装即可从安装目录中提取sysroot,压缩后>4GB


7.Github下载树莓派官方提供编译工具链

https://github.com/raspberrypi/tools

下载链接

8.解压到Debian10x86虚拟机

目录:/home/tools

将6步骤获取的sysroot目录放在:

/home/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/arm-linux-gnueabihf目录下

9.在/home/tools目录下创建toolchain_rasp_arm32.cmake

# 交叉编译的系统名称
set(CMAKE_SYSTEM_NAME Linux)
# 交叉编译的CPU架构
set(CMAKE_SYSTEM_PROCESSOR arm)
set(USER_PATH "/home/tools")
#代表了一系列的相关文件夹路径的根路径的变更,编译器到指定的根目录下寻找对应的系统库
set(CMAKE_SYSROOT ${USER_PATH}/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/arm-linux-gnueabihf/sysroot)
#set(CMAKE_FIND_ROOT_PATH ${USER_PATH}/)
# 指定主机上要安装的路径
set(CMAKE_STAGING_PREFIX ${USER_PATH}/cross_install)
#指明C和C++编译器
set(tools ${USER_PATH}/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian)
set(CMAKE_C_COMPILER ${tools}/bin/arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/arm-linux-gnueabihf-g++)
#有些开源的库在编译时需要依赖openssl的库,指明openssl的库和头文件
#SET(OPENSSL_LIBRARIES ${USER_PATH}/usr/lib)
#SET(OPENSSL_INCLUDE_DIR ${USER_PATH}/usr/include/openssl)
#对FIND_PROGRAM()起作用,有三种取值,NEVER,ONLY,BOTH,第一个表示不在你CMAKE_FIND_ROOT_PATH下进行查找,第二个表示只在这个路径下查找,第三个表示先查找这个路径,再查找全局路径,对于这个变量来说,一般都是调用宿主机的程序,所以一般都设置成NEVER
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)

10.创建测试程序

main.c

#include <stdio.h>
int main()
{
    printf("hello world\n");
    
    return 0;
}

CMakeLists.txt

project(test)
cmake_minimum_required(VERSION 2.8)
add_executable(${PROJECT_NAME} main.c)

build_rasp_arm32.sh

#!/bin/sh
rm -rf build-rasp-arm32
mkdir build-rasp-arm32
cd build-rasp-arm32
cmake -DCMAKE_TOOLCHAIN_FILE=/home/tools/toolchain_rasp_arm32.cmake .. 
make

11.执行编译

chmod +x build_rasp_arm32.sh

./build_rasp_arm32.sh

编译完成,生成test程序。拷贝回树莓派os,运行打印hello world.

完成

×
打赏作者
最新回复 (0)
只看楼主
全部楼主
返回