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

Ubuntu 20.04.6交叉编译得到Ubuntu 16.04.6的可执行文件

一、前言

        发现问题,在本地Windows计算机的Ubuntu上编译出可执行程序无法在px30上运行,报错:
“-bash: ./linux_rtu: cannot execute binary file: 可执行文件格式错误”,于是看了一下版本,Windows系统上的是Ubuntu 20.04.6,而px30上的是Ubuntu 16.04.6,架构不匹配(x86_64 vs ARM,版本同步很麻烦所以在网上搜罗些关于交叉编译的资料自己整一下。

二、安装对应的交叉编译工具链

        首先你可以查看一下本地编译出的可执行文件信息,我这里是 x86-64架构:

file ./linux_rtu
得到结果:
./linux_rtu: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/l, BuildID[sha1]=5014ed51e466b1fe076c62715d82807fddf63c11, for GNU/Linux 3.2.0, not stripped

然后再px30上执行指令,我这里是aarch64,armv7l和aarch64都是ARM架构

uname -m
得到结果:
aarch64

直接在本地执行命令安装对应的交叉编译工具:

# 对于 ARM 32位 (armhf)
sudo apt-get install g++-arm-linux-gnueabihf# 对于 ARM 64位 (aarch64)
sudo apt-get install g++-aarch64-linux-gnu

三、重新交叉编译

        我这里使用Cmake,建立build文件夹做结果分类,所以直接执行命令,然后就得到了我这里对应可执行程序:

# 清理之前的编译结果
rm -rf build/*
cd build# 对于 ARM 32位
cmake -DCMAKE_C_COMPILER=arm-linux-gnueabihf-gcc -DCMAKE_CXX_COMPILER=arm-linux-gnueabihf-g++ ..# 对于 ARM 64位
cmake -DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc -DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ ..make

四、其他报错

如果报错这个:

./linux_rtu: /lib/aarch64-linux-gnu/libm.so.6: version `GLIBC_2.29' not found (required by ./linux_rtu)
./linux_rtu: /usr/lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by ./linux_rtu)
./linux_rtu: /usr/lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.22' not found (required by ./linux_rtu)

大概就是链接库的原因,我这里的解决方案是直接在CMakeLists.txt中添加下面内容编译出静态库:

set(CMAKE_EXE_LINKER_FLAGS "-static")

http://www.dtcms.com/a/354010.html

相关文章:

  • 5GNR CSI反馈 TypeI码本
  • Shader开发(十七)着色器中的纹理采样与渲染
  • OpenCV4.X库功能全解---个人笔记
  • 基于51单片机温度控制系统报警器恒温箱水温设计
  • Oh My Zsh + Tabby 终端配置指南
  • CB1-2-基础启航
  • 工业 DCS 全面科普:从入门到 AI 赋能的未来
  • 大视码垛机器人:以技术优势撬动工业码垛升级
  • 【datawhale组队学习】RAG技术 -TASK05 向量数据库实践(第三章3、4节)
  • Scala面试题及详细答案100道(21-30)-- 面向对象编程
  • 丝杆支撑座如何助力自动化设备精准定位?
  • 对接连连支付(四)-- 收款查询
  • 在Python中处理GDB、MDB和Shapefile文件转换
  • 滥用Mybatis一级缓存引发OOM问题
  • 如何使用asyncio库
  • 汽车电气系统的发展演进为测试带来了哪些影响?
  • LangChain4J-(3)-模型参数配置
  • AI生成音乐模型发展现状与前景
  • prettier、eslint、stylelint在项目中使用
  • 理解虚拟 DOM:前端开发中的高效渲染利器
  • Linux操作系统——TCP服务端并发模型
  • Java全栈开发面试实战:从基础到复杂场景的深度解析
  • 【51单片机】【protues仿真】基于51单片机点阵屏系统
  • 全域管控,一触可达:复合机器人远程监控方案重塑智能制造
  • Boosting(提升法)详解
  • Spring Boot + Dubbo 实战教程:打造高性能微服务架构
  • 深度学习12 Reinforcement Learning with Human Feedback
  • openwrt ubus 深入分析
  • C# 字符和字符串
  • 怎么解决大模型幻觉问题