x86 docker 20.04 交叉编译 jetson xavier nx 20.04

coldMoon / 2024-08-29 / 原文

1. jetson 和 x86 交叉编译

在 https://developer.nvidia.com/embedded/jetson-linux-r3541 下载:Bootlin Toolchain gcc 9.3

解压得到,并创建文件夹:

/home/用户名/docker_workspace/mycrosscompile/Bootlin-Toolchain-gcc-9.3

在 mycrosscompile 创建一个文件夹 CrossCompileTest。

vim main.cpp
#include <iostream>

int main(int, char**) {
    std::cout << "Hello, world!\n";
}

1.1 直接使用gcc指令编译c或者cpp文件

交叉编译工具使用的本质就是将原有 g++ 使用的x86_64-linux-gnu指定为交叉工具里的aarch64-linux-gnu

(base) ➜  CrossCompileTest ../Bootlin-Toolchain-gcc-9.3/bin/aarch64-buildroot-linux-gnu-g++ main.cpp -o CCTest-straight
(base) ➜  CrossCompileTest ls   
CCTest-straight  main.cpp
(base) ➜  CrossCompileTest ./CCTest-straight
qemu-aarch64-static: Could not open '/lib/ld-linux-aarch64.so.1': No such file or directory

# 传输到 jetson 设备上面:
(base) ➜  CrossCompileTest scp CCTest-straight 用户名@ip地址:/ssd/workspace/
用户名@ip地址's password: 
CCTest-straight                                          100% 9544    89.0KB/s   00:00

在 jetson 设备上:

用户名@ubuntu:/ssd/workspace$ ./CCTest-straight
Hello, world!

1.2 使用 cmake 编译

vim CMakeLists.txt
cmake_minimum_required(VERSION 3.0.0)
project(CCTest VERSION 0.1.0)

add_executable(CCTest main.cpp)
mkdir build && cd build 
cmake  -DCMAKE_TOOLCHAIN_FILE=/home/h/docker_workspace/mycrosscompile/Bootlin-Toolchain-gcc-9.3/share/buildroot/toolchainfile.cmake .. 
make
ls
CCTest  CMakeCache.txt  CMakeFiles  cmake_install.cmake  Makefile

# 传输到 jetson 设备上面:
(base) ➜  CrossCompileTest scp CCTest 用户名@ip地址:/ssd/workspace/
用户名@ip地址's password: 
CCTest                                          100% 9544    89.0KB/s   00:00

在 jetson 设备上:

用户名@ubuntu:/ssd/workspace$ ./CCTest
Hello, world!

参考:

  1. https://zhuanlan.zhihu.com/p/627218667
  2. https://blog.csdn.net/qq_25776687/article/details/135653087

待实践: