当前位置: 首页 > news >正文

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

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

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

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

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

另外:

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

1、ARMv7L编译

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大型机)

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)

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编译

大端

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(小端)

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

http://www.lryc.cn/news/288390.html

相关文章:

  • requests,js逆向练习
  • Chrome 插件调试
  • 云轴科技ZStack成为交通运输业上云用云推进中心首批成员单位
  • 代码随想录算法训练营31期day4,力扣24+19+02.07+142
  • eNSP学习——利用单臂路由实现VLAN间路由
  • ISO27001认证:企业与个人发展的必备之选
  • SpringBoot使用druid
  • TongWeb8交流常见问答集
  • GBASE南大通用分享-mysql中的load data infile用法
  • Ubuntu18编译jdk8源码
  • 《开始使用PyQT》 第01章 PyQT入门 02 安装Python3和PyQT6
  • Java集合-Map接口(key-value)
  • 【操作系统】实验九 写一个设备驱动程序
  • 基于密码技术的身份认证——基于对称密码体制的身份认证
  • 算法36:单调栈结构、子数组最小乘积的最大值问题(力扣1586)----单调栈
  • django mysql in 有序返回
  • c++24.1.26嵌套if语句
  • 机器学习--基础概念(二)
  • Ubuntu20.04 安装 ROS noetic + MAVROS
  • 【数学笔记】一元n次不等式,分式不等式,绝对值不等式
  • 转载-android性能优化
  • 笔记 | Clickhouse命令行查询
  • Dockerfile-xxxx
  • Vue中的$attrs
  • 使用阿里云的oss对象存储服务实现图片上传(前端vue后端java详解)
  • python实例100第32例:使用a[::-1]按相反的顺序输出列表的值
  • python执行脚本的时候获取输入参数
  • Halcon指定区域的形状匹配
  • Linux——常用命令
  • 外包干了2个月,技术反而退步了...