记录:Ubuntu 18.04 X86 上通过CMake 指定编译器工具链交叉编译。

最好是通过 cmake 命令行来设置,要不然你只有在 CMakeFiles.txt 里面自己写判断语句了。

要用 cmake 交叉编译,必须设置连接器,要不然会使用当前系统的 ld,就是 /usr/bin/ld。

但是其它平台是不会ld上的,elf格式都不一样,所以需要手动指定交叉编译的 ld 工具。

别看某些人乱整文,交叉编译不配连接器,这不是扯淡呢,虽然能编走,但是链接不上等于0。

另外:

路径可以写全路径,但是一般不需要,因为正确安装的交叉编译器都在 /usr/bin、/usr/sbin 之中有软连接,你直接写交叉编译工具链的名字就可以了。

1、ARMv7L编译

bash 复制代码
cmake .. -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc \
    -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ \
    -DCMAKE_LINKER=arm-linux-gnueabihf-ld

2、S390X编译(IBM大型机)

cpp 复制代码
cmake .. -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_C_COMPILER=s390x-linux-gnu-gcc \
    -DCMAKE_CXX_COMPILER=s390x-linux-gnu-g++ \
    -DCMAKE_LINKER=s390x-linux-gnu-ld

3、AARCH64编译(ARMv64)

cpp 复制代码
cmake .. -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \
    -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \
    -DCMAKE_LINKER=aarch64-linux-gnu-ld

安装交叉编译器:

apt-get install gcc-aarch64-linux-gnu -y

apt-get install g++-aarch64-linux-gnu binutils-aarch64-linux-gnu -y

4、MIPS64编译

大端

cpp 复制代码
cmake .. -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_C_COMPILER=mips64-linux-gnuabi64-gcc \
    -DCMAKE_CXX_COMPILER=mips64-linux-gnuabi64-g++ \
    -DCMAKE_LINKER=mips64-linux-gnuabi64-ld

安装交叉编译器:

sudo apt install gcc-mips64-linux-gnuabi64 -y

sudo apt install build-essential g++-mips64-linux-gnuabi64 -y

MIPS64-EL(小端)

cpp 复制代码
cmake .. -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_C_COMPILER=mips64el-linux-gnuabi64-gcc \
    -DCMAKE_CXX_COMPILER=mips64el-linux-gnuabi64-g++ \
    -DCMAKE_LINKER=mips64el-linux-gnuabi64-ld

安装交叉编译器:

sudo apt install gcc-mips64el-linux-gnuabi64 binutils-mips64el-linux-gnuabi64 -y

sudo apt install g++-mips64el-linux-gnuabi64 -y

sudo apt install gdb-multiarch-mips64el-linux-gnuabi64 -y

补充:

可以在 CMakeFiles.txt 之中,手动写工具链的信息,但是我不建议,真心的,跨平台交叉编译,真心不推荐,除非你是真的没办法,但这种也应该写对应平台的编译 patch(补丁)。

相关推荐
AlfredZhao6 小时前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户97183563346612 小时前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪13 小时前
linux 拷贝文件或目录到指定的位置
linux
大树881 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质1 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush41 天前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 天前
Linux 11 动态监控指令top
linux
Inhand陈工1 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智1 天前
ARP代理--工作原理
运维·网络·arp·arp代理