在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 991|回复: 1

[原创] Linux:Lab02 - Gcc Building Process and Numbers in C

[复制链接]
发表于 2019-9-23 15:11:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

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

lab2详细教程.docx

813.17 KB, 下载次数: 23 , 下载积分: 资产 -2 信元, 下载支出 2 信元

发表于 2020-2-24 10:54:33 | 显示全部楼层
thankns
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-3-28 16:28 , Processed in 0.017290 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表