资源预览内容
第1页 / 共28页
第2页 / 共28页
第3页 / 共28页
第4页 / 共28页
第5页 / 共28页
第6页 / 共28页
第7页 / 共28页
第8页 / 共28页
第9页 / 共28页
第10页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第7章 嵌入式Linux开发环境,第7章 嵌入式Linux开发环境,7.1 GNU Tools 7.2 项目管理 7.3 调试器,7.1 GNU Tools,GNU Tools综述 GCC 编译与链接 GCC 工具介绍 C语言库 ELF文件格式,GNU Tools综述,GNU Tools是Linux环境下的开发工具,用于代码的生成。GNU Tools的重要组成部分是GCC。GCC 是GNU Compiler Collection 的缩写,是一个非常优秀的跨平台编译器集合,支持x86、ARM、MIPS 和PowerPC 等多种目标平台,支持C、C+、Java、ADA、Fortran 和Pascal 等多种高级语言。,GNU Tools综述,GNU Tools综述,GNU Tools综述,GNU Tools是Linux环境下的开发工具,用于代码的生成。GNU Tools的重要组成部分是GCC。GCC 是GNU Compiler Collection 的缩写,是一个非常优秀的跨平台编译器集合,支持x86、ARM、MIPS 和PowerPC 等多种目标平台,支持C、C+、Java、ADA、Fortran 和Pascal 等多种高级语言。,GNU Tools综述,预处理 编译 汇编 链接,GCC 编译与链接,# gcc hello.c -o hello # ./hello Hello world!,预处理 # gcc -E hello.c -o hello.i 编译和汇编 # gcc -c hello.i -o hello.o 链接 # gcc hello.o -o hello,一步完成:,分布完成:,/* hello.c */ #include int main(void) printf (“Hello world!n“ ); return 0; ,GCC 编译与链接,一步完成: # gcc foo1.c foo2.c -o foo,源程序: foo1.c foo2.c,多步完成: # gcc -c foo1.c -o foo1.o # gcc -c foo2.c -o foo2.o # gcc foo1.o foo2.o -o foo,归档工具ar,ar 工具用于建立、修改、提取归档文件(archive)。一个归档文件是包含多个文件的单个文件(也可以把它认为是一个库文件),其结构保证了可以从中检索并得到原始的被包含文件(称做此归档文件的成员)。被包含的原始文件的内容、模式(权限)、时间戳、所有者和组等属性都保存在归档文件中,并且可在提取后,恢复原始文件的相关属性。,ar - p mod relpos archive member .,移除符号工具strip,strip工具用于去除文件中的符号。使用strip既可以移除目标中文件中的某个符号,也可以移除整个节。使用strip,至少要有一个输入文件,也可以输入一个文件列表。,strip -F bfdname |-target=bfdname -I bfdname |-input-target=bfdname -O bfdname |-output-target=bfdname -s|-strip-all -S|-g|-d|-strip-debug -K symbolname |-keep-symbol=symbolname -N symbolname |-strip-symbol=symbolname -x|-discard-all -X |-discard-locals -R sectionname |-remove-section=sectionname -o file -p|-preserve-dates -v |-verbose -V|-version -help objfile.,列出文件符号工具nm,nm工具的功能是列出目标文件中的符号,这样可以帮助程序员分析可执行程序,获得目标文件中的符号信息和它的属性。,nm -a | -debug-syms -g | -extern-only -B -C | -demangle -D | -dynamic -s | -print-armap -A | -o | -print-file-name -n | -v | -numeric-sort -p | -no-sort -r | -reverse-sort -size-sort -u | -undefined-only -t radix | -radix= radix -P | -portability -target= bfdname -f format | -format= format -defined-only -l | -line-numbers -no-demangle -V | -version -help object-file .,目标文件复制工具objcopy,objcopy工具用来把某种格式的目标文件内容进行转换,并输出为另一种格式的目标文件。objcopy使用GNU BFD库读写目标文件,通过这个BFD库,objcopy能够以一种不同于源目标文件的格式来生成目标文件。,objcopy -F bfdname | -target= bfdname -I bfdname | -input-target=bfdname -O bfdname | -output-target= bfdname -S | -strip-all -g | -strip-debug -K symbolname | -keep-symbol= symbolname -N symbolname | -strip-symbol= symbolname -L symbolname | -localize-symbol= symbolname -W symbolname | -weaken-symbol= symbolname -x | -discard-all -X | -discard-locals -b byte | -byte= byte -i interleave | -interleave= interleave -R sectionname | -remove-section= sectionname -p | -preserve-dates -debugging -gap-fill= val -pad-to= address -set-start= val -adjust-start= incr -change-address= incr -change-section-address= section=,+,- val -change-warnings -no-change-warnings -set-section-flags= section= flags -add-section= sectionname= filename -change-leading char -remove-leading-char -weaken -v | -verbose -V | -version -help input-file outfile,目标文件信息工具objdump,objdump 工具用于显示一个或多个目标文件的信息。由其选项来控制显示哪些特定的信息。,objdump -a | -archive-headers -b bfdname | -target= bfdname -debugging -C | -demangle -d | -disassemble -D | -disassemble-all -disassemble-zeroes -EB | -EL | -endian=big | little -f | -file-headers -h | -section-headers | -headers -i | -info -j section | -section= section -l | -line-numbers -S | -source -m machine | -architecture= machine -p | -private-headers -r | -reloc -R | -dynamic-reloc -s | -full-contents -stabs -t | -syms -T | -dynamic-syms -x | -all-headers -w | -wide -start-address= address -stop-address= address -prefix-addresses -noshow-raw-insn -adjust-vma= offset -version -help object-file.,C语言库,在嵌入式程序的C语言程序的开发中,C语言库是应用程序所依赖的基础。在C语言库中,提供一些C语言中程序运行的基础,包括标准的库函数,如:printf、malloc、字符串处理等基本函数操作。,ELF文件格式,ELF(Executable and Linking Format,可执行链接格式)是UNIX系统实验室(USL)作为应用程序二进制接口(Application Binary Interface,ABI)而开发和发布的。工具接口标准委员会(TIS)选择了正在发展中的ELF标准作为工作在32位INTEL体系上不同操作系统之间可移植的二进制文件格式。 ELF文件格式包括三种主要的类型: 可执行文件 可重定向文件(*.o) 共享库(*.so),ELF文件格式,ELF文件从链接器(linker)的角度看,是一些节(sections)的集合;从程序装载器(loader)的角度看,它是一些段(segments)的集合。 ELF格式的程序和共享库具有相同的结构,只是段的集合和节的集合上有些不同。,7.2项目管理,工程管理工具Make与Makefile 版本控制,工程管理工具Make与Makefile,/* main.c */ #include “hello.h“ int main (int argc,char* argv) hello(argc,argv); return 0; /* hello.c */ #include int hello(int argc,char* argv) int i; printf (“Hello world!n“); for(i = 0;i argc; i+) printf(“argv%d = %sn“,i,argvi); return 0; /* hello.h */ int hello(int argc,char* argv
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号