东方耀AI技术分享

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 3570|回复: 0
打印 上一主题 下一主题

[C/C++] 在x64的Ubuntu18.04系统下安装64bit的交叉编译工具aarch64-linux-gn...

[复制链接]

1365

主题

1856

帖子

1万

积分

管理员

Rank: 10Rank: 10Rank: 10

积分
14437
QQ
跳转到指定楼层
楼主
发表于 2021-12-14 15:34:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
在x64的Ubuntu18.04系统下安装64bit的交叉编译工具aarch64-linux-gnu-gcc


联网安装的:
sudo apt-get install gcc-5-aarch64-linux-gnu
安装一个gcc开头的5版本的支持64bit ARM linux的交叉编译工具;


sudo apt-get install gcc-aarch64-linux-gnu
然后再安装一个没有版本号的gcc-aarch64-linux-gnu


以上步骤是安装支持ARM64位系统的交叉编译工具,安装之后,用
aarch64-linux-gnu-gcc -v可以查看里边的版本信息,里边有host是什么,target是什么


结果:
gcc version 7.4.0 (Ubuntu/Linaro 7.4.0-1ubuntu1~18.04.1)




离线安装的:
tar -Jxf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
关键是其中的bin目录下



linux下使用cmake如何指定编译器路径
jiang@jiang-Ubuntu:~/jjj_armadillo_works/build$ cmake ..
-- The C compiler identification is GNU 8.4.0
-- The CXX compiler identification is GNU 8.4.0
Check for working C compiler: /usr/bin/cc
-- Check for working CXX compiler: /usr/bin/c++ - skipped  这里的c++,其实是g++
如果我们不指定编译器,那么,cmake会使用系统原生的编译器
Ubuntu下多个gcc g++版本之间设置优先级来随意切换 http://www.ai111.vip/thread-1052-1-1.html
使用 cmake -D  变量值为有效的编译器名称或者全路径
cmake -D CMAKE_C_COMPILER=gcc -D CMAKE_CXX_COMPILER=g++ ..
cmake -D CMAKE_C_COMPILER=/usr/bin/gcc-8 -D CMAKE_CXX_COMPILER=/usr/bin/g++-8 ..
cmake -D CMAKE_C_COMPILER=/usr/bin/gcc-7 -D CMAKE_CXX_COMPILER=/usr/bin/g++-7 ..


运行结果:
jiang@jiang-Ubuntu:~/jjj_armadillo_works/build$ cmake -D CMAKE_C_COMPILER=/usr/bin/gcc-8 -D CMAKE_CXX_COMPILER=/usr/bin/g++-8 ..
-- The C compiler identification is GNU 8.4.0
-- The CXX compiler identification is GNU 8.4.0
jiang@jiang-Ubuntu:~/jjj_armadillo_works/build$ cmake -D CMAKE_C_COMPILER=/usr/bin/gcc-7 -D CMAKE_CXX_COMPILER=/usr/bin/g++-7 ..
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0


使用CMake交叉编译Arm Linux程序
希望最终编译的程序是运行在arm linux系统上的,这就需要交叉编译
对于交叉编译,CMake并不知道目标系统是什么,所以需要设置一些CMake变量来告知CMake
CMAKE_SYSTEM_NAME:即目标系统名,这里是Linux
CMAKE_SYSTEM_PROCESSOR :目标系统的处理器名,这里是arm



工具链文件:arm_linux_setup.cmake  cmake模块文件
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)


set(tools "/home/jiang/my_cross_compile/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu")
set(CMAKE_C_COMPILER ${tools}/bin/aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER ${tools}/bin/aarch64-linux-gnu-g++)
message("我的arm交叉编译工具目录:" ${tools})


使用CMake的参数CMAKE_TOOLCHAIN_FILE来指定工具链文件
// 注意,工具链文件的指定一定要紧跟cmake命令之后,不能放到 .. 后面
cmake -D CMAKE_TOOLCHAIN_FILE=/home/jiang/my_cross_compile/arm_linux_setup.cmake ..

CMAKE配置工具链文件和make install的安装目录
  1. mkdir build_arm && cd build_arm
  2. cmake -D CMAKE_TOOLCHAIN_FILE=/home/jiang/my_cross_compile/arm_linux_setup.cmake -D CMAKE_INSTALL_PREFIX=/home/jiang/my_cross_compile/all_dependence_software_installed ..
复制代码



可以看到输出:
-- Check for working C compiler: /home/jiang/my_cross_compile/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc - skipped
-- Check for working CXX compiler: /home/jiang/my_cross_compile/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ - skipped


make后使用file命令去查看这个可执行文件,可以看到其运行平台是64位ARM处理器上的Linux系统
$ file main
main: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked,
interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildID[sha1]=6ac6050b405f5344159d83d30b12f57a6d8c65a7, with debug_info, not stripped
使用工具链文件的好处就是只要编写一遍,然后在任意地方只需要使用CMAKE_TOOLCHAIN_FILE去指定其位置就可以了,非常方便
与交叉编译有关的变量还有很多 以后遇到问题再说吧


01_ubuntu系统版本.png (40.08 KB, 下载次数: 123)

01_ubuntu系统版本.png

arm_linux_setup.cmake

327 Bytes, 阅读权限: 10, 下载次数: 0

让天下人人学会人工智能!人工智能的前景一片大好!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|人工智能工程师的摇篮 ( 湘ICP备2020019608号-1 )

GMT+8, 2024-5-6 00:32 , Processed in 0.202868 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表