首页 > 其他分享 >交叉编译环境配置(arm)

交叉编译环境配置(arm)

时间:2024-05-17 13:18:59浏览次数:26  
标签:交叉 CROSS COMPILE 编译 export linux wget arm

1.拿到对应厂商给的交叉包,如:

arm-rockchip830-linux-uclibcgnueabihf.tar.xz

2.上传到对应的服务器上(x86的centos或者ubuntu都可以),解压到目录

3.配置环境变量

在交叉包arm-rockchip830-linux-uclibcgnueabihf的下边,有一个脚本env_install_toolchain.sh,直接执行即可配置成功,可/root/.bash_profile中查看

[root@localhost ~]# cat /root/.bash_profile 
# .bash_profile

export PATH
export PATH=/data/tools/arm-rockchip830-linux-uclibcgnueabihf/bin:$PATH

4.交叉编译iperf3

步骤一:下载iperf3源码

wget https://github.com/esnet/iperf/archive/refs/tags/3.9.tar.gz
tar -xzf 3.9.tar.gz
cd iperf-3.9

步骤二:配置环境变量
设置交叉编译工具链的路径和前缀。假设你的工具链在/usr/local/arm-rockchip830-linux-uclibcgnueabihf/路径下。

export PATH=/usr/local/arm-rockchip830-linux-uclibcgnueabihf/bin:$PATH
export CROSS_COMPILE=arm-rockchip830-linux-uclibcgnueabihf-
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export AS=${CROSS_COMPILE}as
export LD=${CROSS_COMPILE}ld
export NM=${CROSS_COMPILE}nm
export OBJCOPY=${CROSS_COMPILE}objcopy
export OBJDUMP=${CROSS_COMPILE}objdump
export RANLIB=${CROSS_COMPILE}ranlib
export STRIP=${CROSS_COMPILE}strip

步骤三:运行配置脚本
配置脚本需要知道你正在使用的交叉编译工具链。你需要告诉配置脚本使用交叉编译,并指定主机类型。

./configure --host=arm-rockchip830-linux-uclibcgnueabihf
步骤四:编译和安装
一旦配置完成,你可以运行make和make install命令来编译和安装iperf3。

make

make install
如果你希望将iperf3安装到特定目录(例如,交叉编译环境的根文件系统),可以在make install时指定安装前缀:

make install DESTDIR=/path/to/target/rootfs

5.交叉编译wget

步骤一:下载并解压 wget 源码
首先,下载 wget 的源码:

wget https://ftp.gnu.org/gnu/wget/wget-latest.tar.gz
tar -xzf wget-latest.tar.gz
cd wget-*

步骤二:设置环境变量
设置交叉编译工具链的路径和前缀:

export PATH=/data/tools/arm-rockchip830-linux-uclibcgnueabihf/bin:$PATH
export CROSS_COMPILE=arm-rockchip830-linux-uclibcgnueabihf-
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export AS=${CROSS_COMPILE}as
export LD=${CROSS_COMPILE}ld
export NM=${CROSS_COMPILE}nm
export OBJCOPY=${CROSS_COMPILE}objcopy
export OBJDUMP=${CROSS_COMPILE}objdump
export RANLIB=${CROSS_COMPILE}ranlib
export STRIP=${CROSS_COMPILE}strip

步骤三:配置
使用 configure 脚本来配置 wget 源码以使用交叉编译工具链:

./configure --host=arm-rockchip830-linux-uclibcgnueabihf --build=x86_64-linux-gnu --target=arm-linux --prefix=/path/to/installation/directory
在这个命令中:

--host 指定目标系统。
--build 指定构建系统。
--target 指定编译目标。
--prefix 指定安装目录,可以根据需要调整。

步骤四:编译和安装
运行 make 命令进行编译:

make
然后安装编译好的 wget:

make install DESTDIR=/path/to/target/rootfs

步骤五:将二进制文件复制到目标设备
将编译好的 wget 二进制文件复制到目标 ARM 设备:

scp /path/to/installation/directory/bin/wget root@<ARM_DEVICE_IP>:/path/to/destination

步骤六:在目标设备上运行
SSH 进入目标设备并运行 wget:

ssh root@<ARM_DEVICE_IP>
chmod +x /path/to/destination/wget
/path/to/destination/wget --version

验证二进制文件
在目标设备上,使用 file 命令检查二进制文件类型:

file /path/to/destination/wget
输出应类似于:

wget: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-uClibc.so.0, for GNU/Linux 3.2.0, not stripped

使用 ldd 命令检查二进制文件的库依赖:

ldd /path/to/destination/wget
确保所有依赖库在目标设备上都可用。

步骤七:调试
如果遇到问题,请检查以下事项:

验证工具链:确保你的交叉编译工具链是正确的,并且用于编译时的配置是正确的。

库依赖:确保所有必需的动态库在目标设备上可用。可以通过静态编译来避免动态库依赖问题:

./configure --host=arm-rockchip830-linux-uclibcgnueabihf LDFLAGS="-static"
make

6.编译环境变量设置(临时or永久)

设置环境变量的步骤可以在你的终端中执行。为了确保这些环境变量在每次编译时都有效,可以选择临时设置(只在当前终端会话中有效)或永久设置(每次打开终端时自动生效)。

临时设置环境变量
在你的终端中直接执行这些命令。它们将在当前终端会话中有效,关闭终端后设置将失效。

export PATH=/data/tools/arm-rockchip830-linux-uclibcgnueabihf/bin:$PATH
export CROSS_COMPILE=arm-rockchip830-linux-uclibcgnueabihf-
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export AS=${CROSS_COMPILE}as
export LD=${CROSS_COMPILE}ld
export NM=${CROSS_COMPILE}nm
export OBJCOPY=${CROSS_COMPILE}objcopy
export OBJDUMP=${CROSS_COMPILE}objdump
export RANLIB=${CROSS_COMPILE}ranlib
export STRIP=${CROSS_COMPILE}strip

永久设置环境变量
为了使环境变量在每次打开终端时都自动生效,可以将这些设置添加到你的 shell 配置文件中,如 .bashrc、.bash_profile 或 .profile 文件中。以下步骤假设你使用的是 Bash shell。

1. 编辑配置文件
打开你的 .bashrc 或 .bash_profile 文件进行编辑(选择其中一个即可,通常 .bashrc 是更常用的)。

nano ~/.bashrc
或者

nano ~/.bash_profile

2. 添加环境变量
在文件的末尾添加以下行:

# Add ARM cross-compilation tools to PATH
export PATH=/data/tools/arm-rockchip830-linux-uclibcgnueabihf/bin:$PATH
export CROSS_COMPILE=arm-rockchip830-linux-uclibcgnueabihf-
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export AS=${CROSS_COMPILE}as
export LD=${CROSS_COMPILE}ld
export NM=${CROSS_COMPILE}nm
export OBJCOPY=${CROSS_COMPILE}objcopy
export OBJDUMP=${CROSS_COMPILE}objdump
export RANLIB=${CROSS_COMPILE}ranlib
export STRIP=${CROSS_COMPILE}strip

3. 保存并关闭文件
在 nano 中,按 Ctrl+O 保存文件,按 Enter 确认,然后按 Ctrl+X 退出编辑器。

4. 使更改生效
你需要重新加载文件以使更改生效,或者重新打开一个终端。可以使用以下命令重新加载:

source ~/.bashrc
或者

source ~/.bash_profile

5.验证环境变量
确保环境变量已正确设置:

echo $PATH
echo $CROSS_COMPILE
输出中应包含 /data/tools/arm-rockchip830-linux-uclibcgnueabihf/bin 以及 arm-rockchip830-linux-uclibcgnueabihf- 前缀。

 

标签:交叉,CROSS,COMPILE,编译,export,linux,wget,arm
From: https://www.cnblogs.com/Leonardo-li/p/18197623

相关文章

  • 【吐槽】今天才发现PyCharm不支持对Python脚本进行块注释
    在PyCharm中对Python脚本Ctrl+Shift+/进行块注释不起作用,然后使用OpenArk64查看是否热键占用冲突,没有发现其他占用。然后发现PyCharm中Code菜单项下的选项CommentwithBlockComment是灰色的。又查了下,最后发现jetbrains官方帮助文档中已说明PyCharm不支持对Python脚本进行......
  • NX(DEP)、Canary(FS)、 RELRO(ASLR)、PIE编译选项
    CANARY(栈保护溢出标志)这个选项表示栈保护功能有没有开启。栈溢出保护是一种缓冲区溢出攻击缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖站上的返回地址来让shellcode能够得到执行。当启动栈保护后,函数开始执行的时候会先往栈里插入cookie信息,当但会真正返回的时......
  • 鸿蒙HarmonyOS实战-Stage模型(服务卡片介绍和运行机制)
    ......
  • Explorez le Charme du Français
    GénéréparChatGPT.ExplorezleCharmeduFrançais......
  • 鸿蒙HarmonyOS Next应用开发需要学什么语言
    鸿蒙HarmonyOSNext应用开发需要学什么语言?鸿蒙HarmonyOSNext作为华为自主研发的操作系统,其在应用开发方面有着独特的需求和优势。对于想要从事鸿蒙应用开发的开发者来说,掌握合适的编程语言是至关重要的。本文将详细探讨鸿蒙HarmonyOSNext应用开发需要学习的语言,帮助开发者更好......
  • C++_交叉编译和pybind11
    编译本地编译和交叉编译本地编译当前平台编译交叉编译交叉编译是指在一个平台上编译另一个平台上运行的代码。在C++中,交叉编译通常涉及以下步骤:安装交叉编译工具链。配置编译环境。使用工具链编译代码。首先,确保安装了交叉编译工具链,例如gcc-arm-l......
  • 开源流媒体服务器ZLMediaKit在Windows上编译过程详解(附编译后版本下载)
    场景开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130136245以上讲了ZLMediaKit的具体使用场景,文章中使用的windows的版本不是最新版,比如在flv播放时,旧......
  • linux内核Makefile和busybox编译
    刚开始学习Linux时的一些记录linux内核配置体验在arch/arm/configs/目录下面找到相似的配置文件,其名称一般为xxx_defconfigmakexxx_defconfigmakemenuconfig配置你的内核,配置完成后生成.config文件在TOPDIR,该文件由于是以‘.’开头,故在linux下是一个隐藏的文件。生成......
  • nacos2.3.2部署(鲲鹏arm版)
    1.说明  本次编译是因为公司适配鲲鹏arm系列,业务涉及到了nacos-server,所以就选择最新版本进行了编译,期间也想直接使用官方镜像nacos/nacos-server:v2.1.2-slim、nacos/nacos-server:v2.2.0-slim,无一例外失败了,启动不了,所以最后只能选择源码编译,在制作镜像的方式进行。2.编......
  • flutter开发项目编译失败依赖冲突的解决方法dependency_overrides
    1.问题在复杂的稍等大点的flutter项目当中,依赖各种第三方框架是很正常,而且也有有很多依赖的,但有时难免存在不同的框架刚好使用了同一个依赖库的不同版本,特别是依赖了系统的某个库的不同版本这个时候就难免会出现同一个依赖库不同版本冲突的编译失败问题2.现象Becauseflut......