ubuntu中交叉编译

1.安装交叉编译工具链64位

1
2
sudo apt update
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu

查看版本

1
2
3
4
5
6
aarch64-linux-gnu-gcc --version

#aarch64-linux-gnu-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
#Copyright (C) 2021 Free Software Foundation, Inc.
#This is free software; see the source for copying conditions. There is NO
#warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE

此时交叉编译工具链gcc在/usr/bin/aarch64-linux-gnu-gcc,g++在/usr/bin/aarch64-linux-gnu-g++

头文件和库在/usr/aarch64-linux-gnu

2.测试

写入main.cpp文件

1
2
3
4
5
6
7
8
//main.cpp
#include<iostream>

using namespace std;
int main(){
printf("hello!this is haiyue embreded world!\n");
return 0;
}

编译

1
aarch64-linux-gnu-g++ main.cpp -o main

查看相关信息

1
file main

main: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=bef44d88a3fff0790aadba3fa7c98ee937915af8, for GNU/Linux 3.7.0, not stripped

3.使用cmake

先写一个简单的项目

main.cpp

1
2
3
4
5
6
7
8
//main.cpp
#include<iostream>

using namespace std;
int main(){
printf("hello!this is haiyue embreded world!\n");
return 0;
}

CMakeLists.txt

1
2
3
4
5
6
#CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(test)

set(CMAKE_CXX_STANDARD 17)
add_executable(test main.cpp)

编译

1
2
cmake -S . -B build
cmake --build build

运行

1
./build/test

hello!this is haiyue embreded world!

说明项目可以运行。

4.cmake配置交叉编译

方式1(不推荐)-直接在CMakeLists.txt指定

1
2
3
4
5
6
7
8
9
10
11
12
#CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(test)

#直接在CMakeLists.txt指定
set(tools /usr/bin)
SET(CMAKE_C_COMPILER ${tools}/aarch64-linux-gnu-gcc)
SET(CMAKE_CXX_COMPILER ${tools}/aarch64-linux-gnu-g++)
SET(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu) #可选

set(CMAKE_CXX_STANDARD 17)
add_executable(test main.cpp)

方式2(推荐)-通过 CMAKE_TOOLCHAIN_FILE指定

新建文件aarch64-linux-gnu.cmake

1
2
3
4
5
6
7
8
9
10
#aarch64-linux-gnu.cmake
SET(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
SET(CMAKE_SYSTEM_VERSION 1)

#编译时 linux编译时候加上参数 -D CMAKE_TOOLCHAIN_FILE=aarch64-linux-gnu.cmake
set(tools /usr/bin)
SET(CMAKE_C_COMPILER ${tools}/aarch64-linux-gnu-gcc)
SET(CMAKE_CXX_COMPILER ${tools}/aarch64-linux-gnu-g++)
SET(CMAKE_FIND_ROOT_PATH /usr/aarch64-linux-gnu)

编译指定工具链文件-DCMAKE_TOOLCHAIN_FILE=aarch64-linux-gnu.cmake即可

1
2
cmake -S . -B build2 -DCMAKE_TOOLCHAIN_FILE=aarch64-linux-gnu.cmake 
cmake --build build2

Windows中交叉编译

在windows中类似,需要下载好对应的交叉编译工具

并新建一个aarch64-linux-gnu.cmake文件,在其中指定好对应的编译器地址

在构建时指定对应的CMAKE_TOOLCHAIN_FILE,即可