记录: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(补丁)。

相关推荐
发量惊人的中年网工6 小时前
服务器托管一个机柜一年多少钱?2026年9月最新机柜租用价格参考
运维·服务器·网络
星恒随风6 小时前
Linux进程基础(二):进程调度、上下文切换、O(1)调度器、环境变量与虚拟地址空间
linux·笔记·学习·状态模式
fundoit7 小时前
资源服务器如何对 JWT 进行验签
java·运维·服务器·spring boot·php·oauth2
云贝贝贝7 小时前
【无标题】TDSQL 分片键怎么选?选错等于数据倾斜加跨分片慢查询
运维·服务器·数据库·腾讯云
浪子明X7 小时前
AI 日报自动化:先把事实、时间和引用做成可检查的编辑流水线
运维·人工智能·自动化
hzxpaipai7 小时前
AI把网站页面做出来了,谁来负责后台、服务器和正式上线?
运维·服务器·人工智能
xbzb7 小时前
一边装一边报错:CentOS 7 + LNMP 跑 ECShop 的常见故障与解法
linux·运维·centos
遇印记7 小时前
数据通信初步
运维·服务器·网络·windows·学习
学linux的QQ蛋7 小时前
图解 Linux 驱动编译进内核的完整工作流程
linux·运维·服务器
承渊政道7 小时前
Linux网络学习【UDP Socket编程实战:网络命令与客户端访问Linux验证】
linux·网络·学习·ubuntu·编程实战·udp socket