您的位置:首页 > 运维架构 > Linux

arm-linux-gcc安装

2009-07-13 18:33 393 查看
一直要学嵌入式,可都不知道该如何学,这是csdn上的学习的一点记录,还没有测试过。

<<嵌入式系统实践教程>> 机械工业出版社(附DVD光盘) 陈渝 主编

GCC 二进制工具包。包含gcc/binutil/libc等。GCC包括编译器和链接器
对于ARM 可以下载 arm-linux-tools-20061213.tar.gz
将其解压到某个目录中
#tar -xzvf arm-linux-tools-20061213.tar.gz -c ./

设定运行的环境变量:
export PATH=$(your_path):$PATH

GCC的主要二进制工具包含以下部分:
归档工具:ar
ELF格式文件信息读取:readelf
符号信息工具:nm
去除符号工具:strip
目标文件信息:objdump
目标文件复制:objcopy

#include <stdio.h>

int hello(int argc,char* argv[])
{
int i;
printf ("Hello world!/n");

for(i=0;i<argc;i++)
{
printf("argv[%d]=%s/n",i,argv[i]);
}
return 0;
}

对多个文件的编译和链接
#arm-linux-gcc main.c hello.c init.c -o test

分步编译
预处理,编译,汇编,
-s 、-E
#arm-linux-gcc -pipe -g -Wall -I. -c -o hello.o hello.c
链接
#arm-linux-gcc -Wall -g hello.o init.o main.o -o test

生成静态链接的可执行程序
#arm-linux-gcc -Wall -g hello.o init.o main.o -static -o test_static

ar归档工具生成静态库
#arm-linux-ar -rv libtest_s.a init.o hello.o

查看静态库中的内容
#arm-linux-ar -t libtest_s.a

删除静态库中的内容
#arm-linux-ar -d libtest_s.a init.o

直接链接静态库,不需目标文件
#arm-linux-gcc -Wall main.o -L. -ltest_s -o testbylib

动态库生成
#arm-linux-gcc -shared -Wall -g hello.o init.o -o libtest_d.so

链接动态为生成可执行程序
#arm-linux-gcc -Wall -g main.o -L. -ltest_d -o test_exe

修改环境变量
#export LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH

readelf读取ELF文件信息
#arm-linux-readelf -h hello.o
#arm-linux-readelf -h XXX

另一个linux下的工具file看ELF
#file hello.o libtest_d.so test

nm用于显示文件中的符号 用于各种ELF格式
T代码段
D已初始化的数据段
B未初始化的数据段
U使用但没有定义的符号
W,weak缩写,其他符号可以覆盖当前定义
小写代表局部local符号,大写代表全局global符号

strip去除符号工具
#arm-linux-strip test -o test_stripped

#arm-linux-nm test_stripped
#arm-linux-file test_stripped

objdump显示文件信息
-D 显示文件中所有汇编信息
-R 显示文件的动态重定位入口,仅对动态为有意义

#arm-linux-objdump -h hello.o

#arm-linux-objdump -D hello.o

objcopy 目标文件复制
可将上标文件转换成另一种格式的目标文件,还可以用于去除文件中的信息。

转换为纯二进制文件
#arm-linux-objcopy test -O binary test.bin

生成S-Redord格式文件
#arm-linux-objcopy test -O srec test.srec

更改输出文件的信息
#arm-linux-objcopy test -S test.stripped
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: