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.
完成