arm-linux-gcc交叉编译容器 centos7 环境

简介: arm-linux-gcc交叉编译容器 centos7 环境

直接使用 arm-linux-gcc交叉编译容器 centos7 环境

docker run -tdi -p 50000:22 --name armlinuxgcc --privileged=true  registry.cn-hangzhou.aliyuncs.com/mkmk/centos:armlinuxgcc init 
进入容器后输入 
arm-linux-gcc -v
如果找不到命令。先输入
source /etc/profile
 再次输入 版本查看
 arm-linux-gcc -v
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /opt/FriendlyARM/mini2440/build-toolschain/working/src/gcc-4.4.3/configure --build=i386-build_redhat-linux-gnu --host=i386-build_redhat-linux-gnu --target=arm-none-linux-gnueabi --prefix=/opt/FriendlyARM/toolschain/4.4.3 --with-sysroot=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --enable-languages=c,c++ --disable-multilib --with-arch=armv4t --with-cpu=arm920t --with-tune=arm920t --with-float=soft --with-pkgversion=ctng-1.6.1 --disable-sjlj-exceptions --enable-__cxa_atexit --with-gmp=/opt/FriendlyARM/toolschain/4.4.3 --with-mpfr=/opt/FriendlyARM/toolschain/4.4.3 --with-ppl=/opt/FriendlyARM/toolschain/4.4.3 --with-cloog=/opt/FriendlyARM/toolschain/4.4.3 --with-mpc=/opt/FriendlyARM/toolschain/4.4.3 --with-local-prefix=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-c99 --enable-long-long --enable-target-optspace
Thread model: posix
gcc version 4.4.3 (ctng-1.6.1)

这就是交叉编译器的创建过程

请自行百度 arm-linux-gcc 的使用,来进一步学习如何编译

如果你不关心容器的构建过程,下边的都不用看了。

arm-linux-gcc-4.4.3 下载路径

http://112.124.9.243/arm9net/mini2440/linux/arm-linux-gcc-4.4.3-20100728.tar.gz

构建交叉编译容器

创建空白centos7

docker run -tdi -p 50000:22 --name armlinuxgcc --privileged=true  registry.cn-hangzhou.aliyuncs.com/mkmk/centos:ssh init 

上传压缩包到 /home目录

解压

cd /home
tar -zxvf arm-linux-gcc-4.4.3-20100728.tar.gz
cp -r /home/opt/FriendlyARM/toolschain/4.4.3  /usr/local/arm

配置环境变量

vi /etc/profile
末尾添加
export PATH=$PATH:/usr/local/arm/bin
source /etc/profile
使用
arm-linux-gcc  -v
-linux-gnueabi-gcc: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

报错

ia32-libs is missing for x86_64 platform.

缺乏 32 兼容环境

yum install epel-release
yum install glibc.i686

查看版本

arm-linux-gcc -v
Using built-in specs.
Target: arm-none-linux-gnueabi
Configured with: /opt/FriendlyARM/mini2440/build-toolschain/working/src/gcc-4.4.3/configure --build=i386-build_redhat-linux-gnu --host=i386-build_redhat-linux-gnu --target=arm-none-linux-gnueabi --prefix=/opt/FriendlyARM/toolschain/4.4.3 --with-sysroot=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --enable-languages=c,c++ --disable-multilib --with-arch=armv4t --with-cpu=arm920t --with-tune=arm920t --with-float=soft --with-pkgversion=ctng-1.6.1 --disable-sjlj-exceptions --enable-__cxa_atexit --with-gmp=/opt/FriendlyARM/toolschain/4.4.3 --with-mpfr=/opt/FriendlyARM/toolschain/4.4.3 --with-ppl=/opt/FriendlyARM/toolschain/4.4.3 --with-cloog=/opt/FriendlyARM/toolschain/4.4.3 --with-mpc=/opt/FriendlyARM/toolschain/4.4.3 --with-local-prefix=/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi//sys-root --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-c99 --enable-long-long --enable-target-optspace
Thread model: posix
gcc version 4.4.3 (ctng-1.6.1) 

简单使用

我们在/home 下新建简单代码文件

#include"stdio.h"
int main(){
printf("hello arm\n");
}

先编译生成 x86 的执行问文件

gcc helloArm.c -o hellox86
执行查看效果
./hellox86 
hello arm
arm-linux-gcc helloArm.c -o helloarm
报错  找不到 libstdc++.so.6
 yum whatprovides libstdc++.so.6
 libstdc++-4.8.5-39.el7.i686 : GNU Standard C++ Library
安装依赖
yum install libstdc++-4.8.5-39.el7.i686
arm-linux-gcc helloArm.c -o helloarm
执行
 ./helloarm 
-bash: ./helloarm: cannot execute binary file

使用arm容器

配置qemu 依赖

https://blog.csdn.net/xiang_freedom/article/details/92724299


下载上传

https://github.com/multiarch/qemu-user-static/releases

/usr/bin/qemu-aarch64-static

/usr/bin/qemu-arm-static

到宿主机的/usr/bin 目录下

chmod 777 /usr/bin/qemu-aarch64-static
chmod 777 /usr/bin/qemu-arm-static


拖取arm 容器

指定 docker 参数

docker run --rm --privileged multiarch/qemu-user-static:register
docker run -it -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static  -p 51000:22 --name arm64   arm64v8/ubuntu 
docker run -it -v /usr/bin/qemu-arm-static:/usr/bin/qemu-arm-static  -p 51000:22 --name arm32   arm32v7/ubuntu 

把我们之前的编译的文件放到这里 /home

直接运行 
/home/helloarm
./helloarm: No such file or directory
这里并不是说找不到可执行文件,而是找不到
执行文件中的依赖
回到宿主机
宿主机执行  readelf -a helloarm 
 [Requesting program interpreter: /lib/ld-linux.so.3]


目标安装依赖

把目标机缺少的 /lib 安装一下就好了

把宿主机 /usr/local/arm/arm-none-linux-gnueabi/lib

内容拷贝到 目标机 /lib

宿主机

cd /usr/local/arm/arm-none-linux-gnueabi/lib
tar -cvf lib2.tar *

目标机

cd lib
tar -xvf lib2.tar

arm64 换源

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-security main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-updates main multiverse restricted universe
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ xenial-backports main multiverse restricted universe

成功在目标机执行arm代码

配置目标机

把宿主机 /usr/local/arm/arm-none-linux-gnueabi/lib

内容拷贝到 目标机 /lib

宿主机

cd /usr/local/arm/arm-none-linux-gnueabi/lib
tar -cvf lib2.tar *

目标机

cd lib
tar -xvf lib2.tar


配置好的目标机镜像

registry.cn-hangzhou.aliyuncs.com/mkmk/ubuntu:arm32

docker run -it -v /usr/bin/qemu-arm-static:/usr/bin/qemu-arm-static   --name arm32   registry.cn-hangzhou.aliyuncs.com/mkmk/ubuntu:arm32 


进入目标机后执行

/lib/helloarm
输出 :hello arm


目录
打赏
0
0
1
0
3
分享
相关文章
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
(已成功解决)Linux环境报错—bash: wget: command not found;常见Linux发行版本,Linux中yum、rpm、apt-get、wget的区别;Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
513 68
(已解决)Linux环境—bash: wget: command not found; Docker pull报错Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
linux下交叉编译licensecc
通过本文的步骤,您可以在Linux环境下成功交叉编译LicenseCC。本文详细介绍了环境准备、工具链安装、源代码下载、CMake配置、编译和验证的全过程。希望这些内容对您的学习和工作有所帮助。
21 5
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
本文介绍了Kafka集群的搭建过程,涵盖从虚拟机安装到集群测试的详细步骤。首先规划了集群架构,包括三台Kafka Broker节点,并说明了分布式环境下的服务进程配置。接着,通过VMware导入模板机并克隆出三台虚拟机(kafka-broker1、kafka-broker2、kafka-broker3),分别设置IP地址和主机名。随后,依次安装JDK、ZooKeeper和Kafka,并配置相应的环境变量与启动脚本,确保各组件能正常运行。最后,通过编写启停脚本简化集群的操作流程,并对集群进行测试,验证其功能完整性。整个过程强调了自动化脚本的应用,提高了部署效率。
【手把手教你Linux环境下快速搭建Kafka集群】内含脚本分发教程,实现一键部署多个Kafka节点
云上体验最佳的服务器操作系统 - Alibaba Cloud Linux | 飞天技术沙龙-CentOS 迁移替换专场
本次方案的主题是云上体验最佳的服务器操作系统 - Alibaba Cloud Linux ,从 Alibaba Cloud Linux 的产生背景、产品优势以及云上用户使用它享受的技术红利等方面详细进行了介绍。同时,通过国内某社交平台、某快递企业、某手机客户大数据业务 3 大案例,成功助力客户实现弹性扩容能力提升、性能提升、降本增效。 1. 背景介绍 2. 产品介绍 3. 案例分享
nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点
通过合理配置 Nginx,我们可以高效地管理和发布软件源,为用户提供稳定可靠的服务。
193 13
Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式
本文探讨了Docker容器环境中服务发现与负载均衡的技术与方法,涵盖环境变量、DNS、集中式服务发现系统等方式,以及软件负载均衡器、云服务负载均衡、容器编排工具等实现手段,强调两者结合的重要性及面临挑战的应对措施。
128 3
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
125 4
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
256 3
阿里云服务器ECS架构区别及选择参考:X86计算、ARM计算等架构介绍
在我们选购阿里云服务器的时候,云服务器架构有X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器、高性能计算可选,有的用户并不清楚他们之间有何区别,本文主要简单介绍下这些架构各自的主要性能及适用场景,以便大家了解不同类型的架构有何不同,主要特点及适用场景有哪些。
153 10