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


相关文章
|
3天前
|
编解码 Linux
FFmpeg开发笔记(二十八)Linux环境给FFmpeg集成libxvid
XviD是开源的MPEG-4视频编解码器,曾与DivX一起用于早期MP4视频编码,但现在已被H.264取代。要集成XviD到Linux上的FFmpeg,首先下载源码,解压后配置并编译安装libxvid。接着,在FFmpeg源码目录中,重新配置FFmpeg以启用libxvid,然后编译并安装。成功后,通过`ffmpeg -version`检查是否启用libxvid。详细步骤包括下载、解压libxvid,使用`configure`和`make`命令安装,以及更新FFmpeg配置并安装。
13 2
FFmpeg开发笔记(二十八)Linux环境给FFmpeg集成libxvid
|
3天前
|
Rust Linux iOS开发
Rust 交叉编译 macOS 为 Linux 和 Windows
Rust 交叉编译 macOS 为 Linux 和 Windows
11 0
|
4天前
|
Ubuntu Unix 大数据
【Linux操作系统】历史与环境
【Linux操作系统】历史与环境
【Linux操作系统】历史与环境
|
6天前
|
Linux 编译器 C语言
编译Linux内核:基础、重要性和交叉编译方法
Linux内核作为操作系统的心脏,负责管理计算机的硬件资源,同时也是运行所有其他程序的基础。理解如何编译Linux内核对于系统管理员、开发者乃至高级用户来说都是一项极其宝贵的技能。本文将介绍编译Linux内核的基本知识、编译的重要性、具体步骤以及交叉编译的概念。
16 0
|
7天前
|
运维 Linux 网络安全
跨平台SSH文件传输:Linux与Windows环境下的实践指南
本文介绍了在Linux和Windows之间使用SCP、SecureCRT及PuTTY工具集进行文件传输的方法。在Linux中,利用SCP命令进行文件下载、上传及目录传输。在Windows环境下,PSFTP和PSCP提供类似功能,而SecureCRT作为SSH客户端,支持设置上传下载目录并进行文件传输。掌握这些工具的使用可提升跨平台运维效率。
|
10天前
|
编解码 Linux
FFmpeg开发笔记(二十五)Linux环境给FFmpeg集成libwebp
《FFmpeg开发实战》书中指导如何在Linux环境下为FFmpeg集成libwebp以支持WebP图片编解码。首先,从GitHub下载libwebp源码,解压后通过`libtoolize`,`autogen.sh`,`configure`,`make -j4`和`make install`步骤安装。接着,在FFmpeg源码目录中重新配置并添加`--enable-libwebp`选项,然后进行`make clean`,`make -j4`和`make install`以编译安装FFmpeg。最后,验证FFmpeg版本信息确认libwebp已启用。
17 1
FFmpeg开发笔记(二十五)Linux环境给FFmpeg集成libwebp
|
11天前
|
Linux 编译器 C++
Linux centOS 编译C/C++
Linux centOS 编译C/C++
|
11天前
|
Linux Shell
Linux配置uwsgi环境
Linux配置uwsgi环境
|
11天前
|
NoSQL 关系型数据库 MySQL
Linux搭建mysql以及Redis环境
Linux搭建mysql以及Redis环境
|
11天前
|
Linux Python Windows
Linux创建虚拟环境
Linux创建虚拟环境

热门文章

最新文章