arm-elf-gcc交叉编译器的使用教程
arm-elf-gcc交叉编译器的使用教程
一开始需要安装arm-elf-gcc,但是这是一个32位的程序,我是安装了64位的系统,据说安装ia32.libs依赖库能运行这个,但是看到博客上面前人安装完了系统图标少了一半,然后就怕了。经过了翻看ubuntu论坛和各种博客,才知道14版之后的ubuntu64位官方已经抛弃了ia32.libs这个依赖库,在源列表中也是找不到的。但是官方自身已经支持32位,自带32位依赖库,在根目录下面就有一个lib32文件夹。
安装教程
博主使用的是arm-elf-tools-20040427.sh的编译器,比较老旧,但不影响使用。
- 打开终端
- 切换到arm-elf-tools-200427.sh所在路径
- 增加执行权限
sudo chmod 755 arm-elf-tools-20040427.sh
- 安装
sudo sh arm-elf-tools-20040427.sh
以上,安装完成
注:文件arm-elf-tools-20040427.sh的大小有17M,这个脚本就是安装文件。没事不要用普通的文本编辑器打开,高级点的文本编辑器可以。
使用教程
首先上一份简单的测试代码
int max( int* pt, int size )
{
int max_v = -32768;
int* tmp = &pt[size];
int* pi = pt;
while(pi<tmp){
if( *pi>max_v ){
max_v = *pi;
}
pi++;
}
return max_v;
}
-
arm-elf-gcc -S max.c
得到由c文件生成的汇编文件max.s
-
arm-elf-gcc -c max.s
由汇编文件编译得到Object文件max.o
-
arm-elf-readelf -a max.o > max_elfinfo
这个命令将给出全部的Object文件信息,保存在max_elfinfo这个文件中
-
查看一下max_elfinfo文件:ELF_header
-
查看一下max_elfinfo文件:Section_header
-
hexdump -C max.o > max_hex
直接打印出Object文件的全部字节,保存在max_hex文件中
以上面的.real.text为例子
-
Elf最后输出的内容
.rel.text告诉链接器指令中的哪些地方需要做重定位;
.symtab是符号表。Ndx列是每个符号所在的Section编号 -
arm-elf-ld.real -o max2.out max.o
链接指定Object文件,max2.out为生成的文件,max.o为源文件
由于没有__gccmain函数入口,故有warning,此处先不管,绿色即为新生成文件 -
用readelf命令分析新生成的max2.out
arm-elf-readelf -a max2.out > max2_elfinfo
-
调用不同c文件中的子函数
程序修改后如下:
-
编译两份c文件生成 .o 文件
-
arm-elf-ld.real -o main2.out main.o encrypt_char.o -lc
main2.out是链接生成的文件,main.o encrypt_char.o是参与链接的源文件,-lc 允许链接器搜索默认的路径,当你使用了系统自带的头文件或子函数时,需要添加该选项以便链接器能顺利链接到对应库
-
arm-elf-objdump -S main2.out > main2_1.s
反汇编链接后的.out文件,和链接前的.o文件反汇编结果进行比较
新生成的main2_1.s文件里面比原来的多了很多内容,最大的不同在于区分了各个文件的代码段
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· Vite CVE-2025-30208 安全漏洞
· 《HelloGitHub》第 108 期
· MQ 如何保证数据一致性?
· 一个基于 .NET 开源免费的异地组网和内网穿透工具