X86架构下交叉编译arm64源代码

这篇具有很好参考价值的文章主要介绍了X86架构下交叉编译arm64源代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

libc.so.6


glibc在/lib(/lib32 /lib64)目录下的.so文件为libc.so.6
glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万象。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个操作系统。

libc.so.6: cannot open shared object file: No such file or directory

不小心  unlink /lib64/libc.so.6

导致所有命令都出错

ln: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
执行如下命令就可以还原了,这里的so库是实际使用的库的名称

LD_PRELOAD=/lib64/libc-2.11.3.so ln -sf /lib64/libc-2.11.3.so /lib64/libc.so.6
 

安装标准的C开发环境


在/usr/local 下建立名为arm-tools的文件夹
mkdir /usr/local/arm-tools

下载交叉编译器

在 https://releases.linaro.org/components/toolchain/binaries/latest-5/aarch64-linux-gnu/

可以下载 gcclinaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz 

上传到 /usr/local/arm-tools 目录下,交叉编译工具链的地址:gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz

下载完成后,解压tar包:

tar –xvf gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz 

到 /usr/local/armtools/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin

执行./aarch64-linux-gnu-gcc  -v 

如果显示version `GLIBC_2.14' not found (required by ./aarch64-linux-gnu-gcc)

可以升级glibc的版本,不过不建议这么做


配置环境变量(可以不用配置)
修改配置文件,在配置文件的最后一行加入路径配置: 
Ubuntu:vim /etc/bash.bashrc  
# Add ARM toolschain path 
PATH= /usr/local/arm-tools/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linuxgnu/bin:"${PATH}" 
Centos: vim /etc/profile 
# Add ARM toolschain path 
export PATH=$PATH:/usr/local/arm-tools/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linuxgnu/bin 

环境变量生效与测试
# 生效
Ubuntu: source /etc/bash.bashrc
# 测试
aarch64-linux-gnu-gcc  -v 
执行上面的命令,显示 arm-linux-gnueabi-gcc -v信息和版本 
Centos: source /etc/profile 
         aarch64-linux-gnu-gcc  -v 
执行上面的命令,显示 arm-linux-gnueabi-gcc -v信息和版本 

version `GLIBC_2.14' not found

如下升级glibc版本到2.14做法
# wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
# tar -xvf glibc-2.14.tar.gz
# cd glibc-2.14
# mkdir build; cd build
# ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
# make -j 8
# make install
 
查看版本,发现已升级到2.14版本
# ldd --version
# strings /lib64/libc.so.6 |grep GLIBC_

makefile修改

增加

CROSS_COMPILE=/usr/local/armtools/gcc-linaro-4.9.4-2017.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-
 

修改

CC = $(CROSS_COMPILE)gcc

LD=$(CROSS_COMPILE)ld
AR=$(CROSS_COMPILE)ar
RANLIB=$(CROSS_COMPILE)ranlib

静态库编译合并

要使用* .o文件在c ++ / unix中创建库

ar qc libxxx.a *.o
ranlib libxxx.a
下面是ar命令的格式:

  ar [-]{dmpqrtx}[abcfilNoPsSuvV] [membername] [count] archive files...
c:创建一个库。不管库是否存在,都将创建。
q:快速追加。增加新模块到库的结尾处。并不检查是否需要替换。'a','b',或'I'任选项对此操作没有影响,模块总是追加的库的结尾处。如果使用了任选项v则列出每个模块。 这时,库的符号表没有更新,可以用'ar s'或ranlib来更新库的符号表索引。

-r  将文件插入静态库中。  
s:写入一个目标文件索引到库中,或者更新一个存在的目标文件索引。甚至对于没有任何变化的库也作该动作。对一个库做ar s等同于对该库做ranlib。


将编译完成的.o文件直接加入到了库的末尾,却并没有更新库的有效符号表。连接程序进行连接时,在静态库的符号索引表中无法定 位刚才加入的.o文件中定义的函数或者变量。这就需要在完成库成员追加以后让加入的所有.o文件中定义的函数(变量)有效,完成这个工作需要使用另外一个 工具“ranlib”来对静态库的符号索引表进行更新。 


合并静态库

    $(AR) -M < ./newlib.mri
    
mri文件类似如下:
create libxxx.a
 
addlib lib1.a
addlib lib2.a
addlib lib3.a
addlib lib4.a
addlib     lib5.a
 
save
end文章来源地址https://www.toymoban.com/news/detail-420038.html

到了这里,关于X86架构下交叉编译arm64源代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【交叉编译】编译生成 x86、arm 环境下的FFTW库

    FFTW是一个快速计算离散傅里叶变换的标准C语言程序集,可计算一维或多维实和复数据以及任意规模的DFT。下面主要介绍的是 x86 环境下 FFTW库的编译过程,arm环境下的编译过程和FFTW类似,不同之处在于需要手动指定 编译环境 和 编译器 。 FFTW有三个版本的数据类型:double、

    2024年02月06日
    浏览(95)
  • gcc编译 与交叉编译(x86 to arm) (一)单个文件编译

    源平台: UOS_X86_64 目标平台:UOS_arm 方法:使用现成的交叉编译工具链 参考资料:交叉编译概念 ; 安装交叉编译器 ; 交叉编译入门 ( 步骤1 )去平台下载对应的工具链 https://www.linaro.org/downloads/ https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads 以上两个均可以下载,我下载

    2024年02月06日
    浏览(51)
  • ubuntu x86搭建 麒麟arm QT6交叉编译

    近期项目需求开发平台是unbuntu x86,目标机器是UOS arm架构,由于需要在不同平台上使用程序,需要建立基于QT6.32的交叉编译平台 交叉编译器 https://blog.csdn.net/zhang421412170/article/details/110952705 下载 gcc-arm-8.3-2019.03-x86_64-aarch64-linux-gnu.tar.xz(因为我这里用的是linux平台进行编译,需要

    2024年02月13日
    浏览(47)
  • 交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64

    1.交叉编译是什么,为什么要交叉编译 编译:在一个平台上生成在该平台上的可执行代码 交叉编译:在一个平台上生成在另一个平台上的可执行代码 交叉编译的例子:如51单片机的可执行代码(hex文件)是在集成环境keil上面编译完成的,我们只需要将编译好的可执行代码下

    2024年02月15日
    浏览(46)
  • cmake与交叉编译(x86 to arm)过程和问题全记录

    公司维护一批c++动态库,由于生产需要,每次更新都要在windows、linux_x86、kylin_arm等多个环境中编译一遍,操作比较麻烦,所以想通过交叉编译的方式在一台机器上边编译多个环境的动态库,减少工作量。考虑到工作难度以及本人水平,决定从官方发布的成品交叉编译工具链中

    2024年04月28日
    浏览(45)
  • x86架构上构建arm64架构的docker镜像

    项目需要提供arm64架构上的centos7对应docker镜像,然后本地宿主机只有x86架构机器,因此需要在x86机器上构建centos arm64架构的docker镜像 宿主机操作系统:centos7.7 amd64架构 docker版本:19.03.15 ARM,AMD,X86,AArch64的概念可以参考: https://blog.csdn.net/Bubbler_726/article/details/88397357 下载 qemu-

    2024年02月11日
    浏览(63)
  • arm和x86架构服务器拉取arm64架构的docker镜像

    dockerhub提供的镜像部分支持arm64架构 Docker arm架构服务器拉取docker镜像,默认是arm架构  查看docker镜像的架构 x86平台拉取arm平台的docker镜像 对docker版本有限制 docker运行其他平台容器,需要使用--platform参数指定容器 docker19.03.9及以上版本才支持--platform参数 查看是否开启experi

    2024年01月20日
    浏览(68)
  • 使用QEMU(x86)模拟运行ARM64架构并进行内核调试

    在 x86 上使用 QEMU 虚拟机模拟并调试 ARM64。 参考:ubuntu虚拟机中使用QEMU搭建ARM64环境 主机 ubuntu 20.04, Linux 5.16.0 QEMU emulator version 7.2.92 (v8.0.0-rc2-23-gefcd0ec14b) :qemu-7.2.29 合适的ARM64内核源码:linux-4.14.221.tar.gz 安装交叉编译工具: sudo apt-get install gcc-aarch64-linux-gnu 命令安装以及源码

    2024年02月09日
    浏览(61)
  • 带wiringPi库的交叉编译 ---宿主机x86Ubuntu,目标机ARMv8 aarch64(香橙派)

    带wiringPi库的交叉编译如何进行 先交叉编译wiringPi库,编译出的库适合香橙派,这时候交叉编译可执行程序的平台和链接库的格式也是正确的 ,然后通过-I和-L来指定链接的wiringPi库的头文件和库的位置,但是现在还没有学习过,后面学了补上 此时如果把wiringPi库拿到Ubuntu上进

    2024年02月15日
    浏览(47)
  • x86 32 64 Arm这些听过但不懂,都是什么?是架构还是系统?一文梳理

    x86 听过吗? 64位操作系统知道吧 和x86什么关系 32和64都是什么东西? 曾经的我也一头雾水,今天我才来整理一下,惭愧惭愧! 今天带着沉重的心情来梳理一下学习内容吧 如果你很熟悉很了解计算机的话,应该知道,处理器、操作系统、驱动、软件都有32位和64位之分,只不

    2024年04月29日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包