7 1 GNU Tools p p p GNU

  • Slides: 28
Download presentation

7. 1 GNU Tools p p p GNU Tools综述 GCC 编译与链接 GCC 具介绍 C语言库

7. 1 GNU Tools p p p GNU Tools综述 GCC 编译与链接 GCC 具介绍 C语言库 ELF文件格式

GCC 编译与链接 /* hello. c */ #include <stdio. h> int main(void) { printf ("Hello

GCC 编译与链接 /* hello. c */ #include <stdio. h> int main(void) { printf ("Hello world!n" ); return 0; } 一步完成: 分布完成: # 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

GCC 编译与链接 源程序: foo 1. c foo 2. c 一步完成: # gcc foo 1.

GCC 编译与链接 源程序: foo 1. c foo 2. c 一步完成: # gcc foo 1. c foo 2. c -o foo 多步完成: # gcc -c foo 1. c -o foo 1. o # gcc -c foo 2. c -o foo 2. o # gcc foo 1. o foo 2. o -o foo

移除符号 具strip 具用于去除文件中的符号。使用strip既可以移 除目标中文件中的某个符号,也可以移除整个节。使用 strip,至少要有一个输入文件,也可以输入一个文件列表。 strip [-F bfdname |--target=bfdname ] [-I bfdname |--input-target=bfdname ]

移除符号 具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

列出文件符号 具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 | --undefinedonly ] [-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使用GNU BFD 库读写目标文件,通过这个BFD库,objcopy能够以一种不 同于源目标文件的格式来生成目标文件。 objcopy [ -F bfdname | --target= bfdname

目标文件复制 具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 | --stripsymbol= 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 ] [ --nochange-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 [ -a | --archive-headers ] [ -b bfdname |

目标文件信息 具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] [ --[no]show-raw-insn ] [ --adjust-vma= offset ] [ --version ] [ --help ] [ object-file. . . ]

 程管理 具Make与Makefile /* main. c */ #include "hello. h" int main (int argc,

程管理 具Make与Makefile /* main. c */ #include "hello. h" int main (int argc, char* argv[]) { hello(argc, argv); return 0; } /* hello. c */ #include <stdio. h> int hello(int argc, char* argv[]) { int i; printf ("Hello world!n"); for(i = 0; i < argc; i++) printf("argv[%d] = %sn", i, argv[i]); return 0; } /* hello. h */ int hello(int argc, char* argv[]);

 程管理 具Make与Makefile # Makefile CC : = gcc HEAD : = hello. h

程管理 具Make与Makefile # Makefile CC : = gcc HEAD : = hello. h SRC : = hello. c main. c OBJS : = hello. o main. o TT : = hello INC =. CFLAGS = -pipe -w -I$(INC) LDFLAGS = -Wall all: $(TT): $(OBJS) $(CC) $(LDFLAGS) $(OBJS) -o $@ %. o: %c $(CC) $(CFLAGS) -c $< -o $@ clean: rm -f *. o $(TT)