|
在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的安装目录
- mkdir build_arm && cd build_arm
- 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去指定其位置就可以了,非常方便
与交叉编译有关的变量还有很多 以后遇到问题再说吧
|
|