马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
Lab2详细教程
目标:(1)成功使用gcc编译器 (2)使用编译器成功编译一个c文件
gcc编译过程,hello-world举例 编译过程图示: 整个过程可分为四个阶段逐步完成:预处理,编译,汇编,链接。一个C/C++文件要经过预处理(preprocessing)、编译(compilation)、汇编(assembly)、和链接(linking)才能变成可执行文件。
(1)新建lab2目录,并进入lab2目录
(2)在lab2目录下新建一个文件hello-world.c,并编写程序
(3)第一步:预处理,执行命令:gcc -E -o hello-world.ihello-world.c,这里-E表示预处理,-o 后边紧接的文件表示生成的目标文件
将要包含(include)的文件插入原文件中、将宏定义展开、根据条件编译命令选择要使用的代码,最后将这些代码输出到一个“.i”文件中等待进一步处理,代码行数变得很大。
打开hello-word.i (4)第二步:编译,执行命令:gcc -S -o hello-world.shello-world.i,这里-S表示编译,-o后边紧接的文件表示生成的目标文件 将文本文件hello.i 翻译为hello.s,把C/C++代码(比如上面的".i"文件)“翻译”成汇编代码汇编语言将不同高级语言的不同编译器提供了通用的输出语言。 打开hello-world.s
(5)第三步:汇编,执行命令:as -o hello-world.ohello-world.s 将hello.s 翻译成机器语言保存在hello.o 中,汇编就是将第二步输出的汇编代码翻译成符合一定格式的机器代码,图中为汇编之后的二进制代码文件。 打开hello-world.o
执行命令:objdump -t hello-world.o 查询汇编后的符号表的入口
(6)第四步:链接,执行命令ld -o hello-world-dynamic-linker /lib64/ld-linux-x86-64.so.2 /usr/lib/x86_64-linux-gnu/crt1.o/usr/lib/x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/5/crtbegin.o -lchello-world.o /usr/lib/gcc/x86_64-linux-gnu/5/crtend.o/usr/lib/x86_64-linux-gnu/crtn.o 打开hello-word 把标准库链接进来,执行命令:gcc -o hello-world -l c hello-world.o
(7)第五步:预载,执行命令:ldd hello-world
(8)第六步:执行,执行命令:./hello-world或hello-world
(9)其实上边的过程是可省的,直接执行命令:gcc -g -std=c99 -Wall-Werror -o lab2 hello-world.c,这里-g表示调试,-std表示C标准,-Wall表示打印警告信息,-Werror表示打印错误信息, -o后边紧接的文件表示生成的目标文件
(10)最后,可以将可执行文件hello-world的结果输出成.output文件 打开lab2.output
|