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

arm64系统不支持32位的解决armel armhf

初级代码游戏的专栏介绍与文章目录-CSDN博客

我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。

这些代码大部分以Linux为目标但部分代码是纯C++的,可以在任何平台上使用。

源码指引:github源码指引_初级代码游戏的博客-CSDN博客


        一台设备是arm64的,不能运行arm32程序。硬件是armV8理论上是兼容32位的。

折腾过程

        比如用ldd查看so,输出“not a dynamic executable”,不能识别为可执行代码。用file查看则可以识别为arm EABI5动态链接库,说明文件没错。

        编了一个测试程序,拿上去执行,当然执行不了,提示很奇怪,用readelf命令来查看:

root@ubuntu:~# readelf -a a | grep "Shared"Type:                              DYN (Shared object file)0x00000001 (NEEDED)                     Shared library: [libpthread.so.0]0x00000001 (NEEDED)                     Shared library: [libdl.so.2]0x00000001 (NEEDED)                     Shared library: [libz.so.1]0x00000001 (NEEDED)                     Shared library: [libm.so.6]0x00000001 (NEEDED)                     Shared library: [librt.so.1]0x00000001 (NEEDED)                     Shared library: [libgcc_s.so.1]0x00000001 (NEEDED)                     Shared library: [libstdc++.so.6]0x00000001 (NEEDED)                     Shared library: [libc.so.6]0x00000001 (NEEDED)                     Shared library: [ld-linux-armhf.so.3]

        程序名叫“a”。

        逐个搜了一下,发现ld-linux-armhf.so 找不到,其余应该有但是是64位。

        找了另外一个交叉编译环境的ld-linux-armhf.so,复制到/lib,添加执行权限,不然执行./a提示没有权限(不是a没有权限,而是这个库没有权限)。

        再执行./a,提示
./a: error while loading shared libraries: libpthread.so.0: cannot open shared object file: No such file or directory

        这就上路了,缺的这些库同样找过来,不需要放在/lib,只要能找到就行,也不需要改权限。

        把缺失的库都补上就可以了。

结论

        arm分几个版本,v8支持64位和32程序,但是设备不一定提供了32位程序支持。

        32位程序的启动器是ld-linux-armhf.so,缺这个就不能启动32位程序。这个文件必须放在/lib并具有可执行权限。

关于armel和armhf

        这是两种不同的fpu策略,不兼容,所以下载各种包的时候要注意。

检测是armel还是armhf

        执行命令:

readelf -A /proc/self/exe | grep Tag_ABI_VFP_args

        如果返回Tag_ABI_VFP_args: VFP registers就是armhf,没有返回则是armel(或者根本不是arm)

ubuntu下载交叉编译需要的包

        用包搜索可以搜索到所有架构的包,比如搜索libc:

apt-cache search libc | grep arm

        找所有arm的,返回结果:

返回结果经过了整理
libc6-arm64-cross - GNU C Library: Shared libraries (for cross-compiling)
libc6-armhf-cross - GNU C Library: Shared libraries (for cross-compiling)
libc6-armel-cross - GNU C Library: Shared libraries (for cross-compiling)
libc6-dev-arm64-cross - GNU C Library: Development Libraries and Header Files (for cross-compiling)
libc6-dev-armhf-cross - GNU C Library: Development Libraries and Header Files (for cross-compiling)
libc6-dev-armel-cross - GNU C Library: Development Libraries and Header Files (for cross-compiling)
linux-libc-dev-arm64-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-armhf-cross - Linux Kernel Headers for development (for cross-compiling)
linux-libc-dev-armel-cross - Linux Kernel Headers for development (for cross-compiling)
libc6-dbg-arm64-cross - GNU C Library: detached debugging symbols (for cross-compiling)
libc6-dbg-armel-cross - GNU C Library: detached debugging symbols (for cross-compiling)
libc6-dbg-armhf-cross - GNU C Library: detached debugging symbols (for cross-compiling)
libc6-armel-armhf-cross - Dummy package to get libc6:armel installed
libc6-armhf-armel-cross - Dummy package to get libc6:armhf installed
libc6-dev-armel-armhf-cross - Dummy package to get libc6-dev:armel installed
libc6-dev-armhf-armel-cross - Dummy package to get libc6-dev:armhf installed

        很明显,都分为arm64、armel、armhf三种。 

        安装后的目录在/usr/arm......,找到需要的用就可以了。

        直接指定架构的安装方法:

        sudo apt install libc6:armhf libstdc++6:armhf
        这样就会有ld-linux-armhf.so这个动态库了,应该可以跑32位的程序了。


(这里是文档结束)


http://www.mrgr.cn/news/52851.html

相关文章:

  • 数学对象常用方法,进制转换
  • 简记一段数据清洗项目经历
  • 二叉树算法之二叉树遍历(前序、中序、后序、层次遍历)
  • 线性可分支持向量机的原理推导 线性分隔超平面关于任意样本点 (x_i,y_i)的函数间隔 公式解析
  • 手写Spring IOC-简易版
  • 如何构建企业架构蓝图:从设计到落地,驱动数字化转型的核心路径
  • 深入探讨:人工智能大模型的分类与多样化发展
  • 07. 容器控件(一) - NSCollectionView 网格、NSTabView 卡片、NSPopover 弹出层
  • 一分钟学会MATLAB-数值计算
  • JavaWeb 22.Node.js_简介和安装
  • React Native 项目中使用 Expo Application Services (EAS) 进行多渠道打包
  • 黑盒测试 | 挖掘.NET程序中的反序列化漏洞
  • 进化吧!原始人
  • JVM详解
  • vllm技术详解
  • Kinect Fusion介绍
  • plt.pie饼图的绘制
  • Rocky Linux 9安装Asterisk 20和freepbx 17脚本——筑梦之路
  • 【企业家日活动】威海企联举办“保驾护航·优商兴企”政企恳谈会
  • 分布式数据库:中高级开发者的使用技巧