aarch64-linux-gcc安装编译及生成so动态库和调用

aarch64-linux-gcc下载

官方二进制下载
Ubuntu packages 提供了软件包: gcc-arm-linux-gnueabihf (4:7.4.0-1ubuntu2.3 以及其他的) 。

建议直接从 linaro 的官网下载相应版本的 gcc-linaro 交叉编译工具,并直接选择带有二进制的文件,即在官网入口处选择 binaries 路径,该文件夹下面包含各种版本的已经编译好的 aarch64-linux-gnu-gcc 二进制可执行程序
在这里插入图片描述
x86_64 代表宿主机是64位的,其他的则都为32位的
_be 代表是大端模式,不带该字段的为小端模式

下载完成之后,解压,压缩包里的 bin 目录下,就有我们需要的交叉编译器,直接使用即可。当然,也可以从 ARM 官网下载更多的 GNU Toolchain for the A-profile Architecture

环境变量设置

  1. 把交叉编译工具链的路径添加到环境变量PATH中去,这样就可以在任何目录下使用这些工具。记下上一步中的安装路径,使用命令:vim /etc/profile 编辑profile文件,添加环境变量。
    注:插入字符指令:i 退出保存指令: esc :wq 回车
    在这里插入图片描述

2.在profile中最后一行添加:

export   PATH
=$PATH:/home/song/software/opt/FriendlyARM/toolschain/4.4.3/bin

这个路径就是那个bin目录所在的路径,可能你的不一样,按照你实际的目录填就可以了,如下图

在这里插入图片描述
3. 使用命令:source /etc/profile 使环境变量生效

使用命令:aarch64-linux-gun-gcc -v 显示版本号
aarch64-linux-gun-gcc根据自己bin目录下实际的对应的版本名字输入

动态库编译

对当前文件所有c文件链接生成动态库output

arcch64-linux-gun-gcc   *.c  -fpic -shared -o   ouput.so

动态库调用

调用函数为main.c ,库为output.so,
将两个文件都放在一个文件夹下为path

1.设置目录读写权限

chmod -R 777    path

2.设置库的搜索地址

cd path 
export LD_LIBRARY=$LD_LIBRARY_PATH:$(pwd)

3.执行编译

arrch64-linux-gun-gcc main.c -o  main -L. -loutput

4.测试

./main

部分转自:https://blog.youkuaiyun.com/m0_54850825/article/details/124487551
部分转自:https://www.linuxprobe.com/ubuntu-arm-linux.html
部分转自:https://blog.youkuaiyun.com/qq_42939980/article/details/124150004
参考来源:https://blog.youkuaiyun.com/m0_50662680/article/details/128390637
参考来源:https://blog.youkuaiyun.com/Dai_sir_man/article/details/124608064

<think>好的,用户现在在问关于aarch64-linux-gnu-系列工具的问题,特别是如何用这些工具来编译C文件。首先,我需要确认用户提供的工具列表中有没有合适的编译器。 用户列出的工具里有aarch64-linux-gnu-开头的各种工具,比如ar、as、ld等,这些都是交叉编译工具链的一部分。但通常,C编译器是gcc,所以需要检查列表中是否有aarch64-linux-gnu-gcc。但是用户给出的列表里并没有这个,只看到了aarch64-linux-gnu-goldaarch64-linux-gnu-ld等链接器相关的工具。这可能意味着用户的环境里可能没有安装完整的交叉编译工具链,或者只安装了部分工具。 接下来,用户想编译.c文件,所以需要确认是否存在可用的编译器。如果用户的环境中没有aarch64-linux-gnu-gcc,可能需要安装完整的交叉编译工具链。例如在Ubuntu上,可以通过安装gcc-aarch64-linux-gnu包来获取。 另外,用户可能是在为ARM架构(aarch64)进行交叉编译,所以需要指导用户如何正确使用这些工具。如果确实没有gcc,可能需要手动调用其他工具链中的组件,比如使用aarch64-linux-gnu-as进行汇编,aarch64-linux-gnu-ld进行链接,但这通常比较复杂,不如直接安装完整的交叉编译器方便。 另外,可能用户对交叉编译不太熟悉,需要解释交叉编译的概念,以及为什么需要这些工具。例如,当开发环境是x86_64架构,但目标平台是ARM架构时,就需要交叉编译器来生成可在ARM上运行的可执行文件。 还需要检查用户提供的命令是否正确,比如是否应该使用aarch64-linux-gnu-gcc而不是其他工具。如果没有安装,需要给出安装命令,比如sudo apt install gcc-aarch64-linux-gnu。 最后,要确保回答清晰,步骤明确,帮助用户解决问题,同时补充可能需要的其他信息,比如如何验证安装,如何运行编译后的程序等。</think>从你列出的工具来看,这些属于 **aarch64架构的交叉编译工具链**,但缺少直接编译C文件的`aarch64-linux-gnu-gcc`主程序。以下是详细分析解决方案: --- ### **1. 当前工具用途** 你列出的工具是 **交叉编译工具链的辅助工具**,主要用于: - `aarch64-linux-gnu-ld`:链接器(将目标文件合并为可执行文件) - `aarch64-linux-gnu-as`:汇编器(将汇编代码转为机器码) - `aarch64-linux-gnu-ar`:静态库打包工具 - `aarch64-linux-gnu-objdump`:反汇编工具 - 其他工具如`nm`、`strip`等用于调试优化 但这些工具**无法直接编译C文件**,需配合完整的编译器使用。 --- ### **2. 解决方案** #### **情况1:你需要交叉编译(在x86环境生成ARM程序)** 1. **安装完整交叉编译器**: ```bash # Ubuntu/Debian sudo apt install gcc-aarch64-linux-gnu # CentOS/RHEL sudo yum install gcc-aarch64-linux-gnu ``` 安装后会获得 `aarch64-linux-gnu-gcc`。 2. **编译C文件**: ```bash aarch64-linux-gnu-gcc -o output_name your_file.c ``` 生成的可执行文件可在ARM架构设备(如华为昇腾设备)运行。 --- #### **情况2:你只需本地编译(当前环境是ARM架构)** 1. **直接使用系统自带的`gcc`**: ```bash gcc -o output_name your_file.c ``` 若未安装,通过包管理器安装: ```bash sudo apt install gcc # Ubuntu/Debian sudo yum install gcc # CentOS/RHEL ``` --- ### **3. 验证工具链完整性** 检查是否已有交叉编译器: ```bash which aarch64-linux-gnu-gcc # 若输出路径则表示已安装 ``` --- ### **4. 手动分步编译(不推荐)** 若坚持使用现有工具,需手动完成编译流程(复杂且易错): 1. **预处理**(需要`aarch64-linux-gnu-cpp`,但列表中无此工具) 2. **编译为汇编代码**(需要`aarch64-linux-gnu-gcc -S`) 3. **汇编为目标文件**: ```bash aarch64-linux-gnu-as -o hello.o hello.s ``` 4. **链接为可执行文件**: ```bash aarch64-linux-gnu-ld -o hello hello.o -lc ``` --- ### **总结建议** | 场景 | 操作 | |------|------| | 目标平台为ARM设备 | 安装 `gcc-aarch64-linux-gnu` 并使用 `aarch64-linux-gnu-gcc` | | 当前环境是ARM架构 | 直接使用系统 `gcc` | | 仅做实验性操作 | 安装完整交叉工具链或使用Docker镜像 | 若需进一步帮助,请补充说明你的设备架构目标平台!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_SimpleLife

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值