当前位置:首页 » 编程软件 » gcc汇编编译

gcc汇编编译

发布时间: 2023-08-16 22:25:23

A. gcc是什么意思

GCC(GNU Compiler Collection,GNU编译器套件),是由 GNU 开发的编程语言编译器。它是以GPL许可证所发行的自由软件,也是 GNU计划的关键部分。

GCC原本作为GNU操作系统的官方编译器,现已被大多数类Unix操作系统(如Linux、BSD、Mac OS X等)采纳为标准的编译器,GCC同样适用于微软的Windows。GCC是自由软件过程发展中的着名例子,由自由软件基金会以GPL协议发布。

GCC功能与作用:

1、预处理

命令gcc首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析。

2、编译

用GCC编译C/C++代码时,它会试着用最少的时间完成编译并且编译后的代码易于调试。易于调试意味着编译后的代码与源代码有同样的执行顺序,编译后的代码没有经过优化。

3、连接

当所有的目标文件都生成之后,gcc就调用ld来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。

4、汇编

汇编过程是针对汇编语言的步骤,调用as进行工作,一般来讲,.S为后缀的汇编语言源代码文件和汇编、.s为后缀的汇编语言文件经过预编译和汇编之后都生成以.o为后缀的目标文件。

GCC在执行编译工作的时候,总共需要4步:

1、预处理,生成 .i 的文件[预处理器cpp]

2、将预处理后的文件转换成汇编语言, 生成文件 .s [编译器egcs]

3、有汇编变为目标代码(机器代码)生成 .o 的文件[汇编器as]

4、连接目标代码, 生成可执行程序 [链接器ld]

常用选项

-ansi 只支持 ANSI 标准的 C 语法。这一选项将禁止 GNU C 的某些特色, 例如 asm 或 typeof 关键词。

1、-c:只编译并生成目标文件。

2、-DMACRO:以字符串"1"定义 MACRO 宏。

3、-DMACRO=DEFN:以字符串"DEFN"定义 MACRO 宏。

4、-E:只运行 C 预编译器。

5、-g:生成调试信息。GNU 调试器可利用该信息。

6、-IDIRECTORY:指定额外的头文件搜索路径DIRECTORY。

7、-LDIRECTORY:指定额外的函数库搜索路径DIRECTORY。

8、-lLIBRARY:连接时搜索指定的函数库LIBRARY。

9、-m486:针对 486 进行代码优化。

B. gcc编译线程程序,为什么要加-lpthread,头文件已经包含了<pthread.h>了啊

-lpthread是链接库,

<pthread.h>只有申明,实现部分都在库里面。

创建线程时一般是把函数的指针做参数,所以要加一个取地址符号。

ret=pthread_create(&id,NULL,(void *)&thread,NULL);

另外,建议要检查一下创建线程的返回值ret是否成功,防止影响后面的代码。

(2)gcc汇编编译扩展阅读:

每个语言编译器都是独立程序,此程序可处理输入的原始码,并输出组合语言码。全部的语言编译器都拥有共通的中介架构:一个前端解析符合此语言的原始码,并产生一抽象语法树,以及一翻译此语法树成为GCC的暂存器转换语言〈RTL〉的后端。

编译器最佳化与静态程序码解析技术(例如FORTIFY_SOURCE,一个试图发现缓冲区溢位〈buffer overflow〉的编译器)在此阶段应用于程序码上。最后,适用于此硬件架构的组合语言程序码以Jack Davidson与Chris Fraser发明的算法产出。

C. 我想用gcc编译一个汇编程序,就是把c语言转成汇编。

假设你的函数保存在main.c中。
gcc -S main.c -o main.s
-S表示assembly 汇编的意思,也就是生成汇编文件

D. 为什么我用gcc编译c程序到最后无法自动生成一个exe程序

把你的命令行(控制台)输出的信息贴上来看看,根据提示信息才好判断.
GCC编译C源码有四个步骤:
预处理----->
编译
---->
汇编
---->
链接
现在我们就用GCC的命令选项来逐个剖析GCC过程。
1)预处理(Pre-processing)
在该阶段,编译器将C源代码中的包含的头文件如stdio.h编译进来,用户可以使用gcc的选项”-E”进行查看。
用法:#gcc
-E
hello.c
-o
hello.i
作用:将hello.c预处理输出hello.i文件。
2)编译阶段(Compiling)
第二步进行的是编译阶段,在这个阶段中,Gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,Gcc把代码翻译
成汇编语言。用户可以使用”-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
选项
-S
用法:[root]#
gcc
–S
hello.i
–o
hello.s
作用:将预处理输出文件hello.i汇编成hello.s文件。
[root@richard
hello-gcc]#
ls
hello.c
hello.i
hello.s
3)汇编阶段(Assembling)
汇编阶段是把编译阶段生成的”.s”文件转成二进制目标代码.
选项
-c
用法:[root]#
gcc
–c
hello.s
–o
hello.o
作用:将汇编输出文件test.s编译输出test.o文件。
[root]#
gcc
-c
hello.s
-o
hello.o
[root]#
ls
hello.c
hello.i
hello.o
hello.s
4)链接阶段(Link)
在成功编译之后,就进入了链接阶段。
无选项链接
用法:[root]#
gcc
hello.o
–o
hello.exe
作用:将编译输出文件hello.o链接成最终可执行文件hello.exe。
[root]#
ls
hello.c
hello.exe
hello.i
hello.o
hello.s
运行该可执行文件,出现正确的结果如下。
[root@localhost
Gcc]#
./hello
Hello
World!

E. 嵌入式软件中GCC编译,汇编,链接,调试的作用

GCC:是一套由GNU工程开发的支持多种编程语言的编译器。将程序代码编译成机器语言。
编译:1、利用编译程序从源语言编写的源程序产生目标程序的过程。
2、用编译程序产生目标程序的动作。 编译就是把高级语言变成计算机可以识别的2进制
语言,计算机只认识1和0,编译程序把人们熟悉的语言换成2进制的。 编译程序把一
个源程序翻译成目标程序的工作过程分为五个阶段:词法分析;语法分析;语义检查
和中间代码生成;代码优化;目标代码生成。主要是进行词法分析和语法分析,又称
为源程序分析,分析过程中发现有语法错误,给出提示信息。
汇编:把汇编语言翻译成机器语言的过程称为汇编,在汇编语言中,用助记符(Memoni)代替操作
码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制
码,就把机器语言变成了汇编语言
连接:用来把要执行的程序与库文件或其他已经翻译好的子程序(能完成一种独立功能的程序
模块)连接在一起,形成机器能执行的程序。
调试:编好程序后,用各种手段进行查错和排错的过程。

F. GCC如何编译一个汇编文件,得到可执行文件

gcc -c my.s(生成my.o)
gcc -o my my.o
my就是所要的可执行文件
或者直接可以gcc -o my my.s

热点内容
apachemodpython 发布:2025-02-04 12:33:53 浏览:671
linuxphp安装mysql 发布:2025-02-04 12:32:55 浏览:148
小米手机怎么扩大配置 发布:2025-02-04 12:27:34 浏览:980
金x五毒桃花安卓版哪里有下载 发布:2025-02-04 12:27:29 浏览:483
思快四编程 发布:2025-02-04 12:15:35 浏览:134
安卓手机哪个日历好用无广告 发布:2025-02-04 12:15:32 浏览:935
服务器动态ip启动程序 发布:2025-02-04 11:58:10 浏览:154
怎么自己开个我的世界服务器地址 发布:2025-02-04 11:51:44 浏览:810
整数是数存储 发布:2025-02-04 11:39:44 浏览:694
12123六位密码是多少 发布:2025-02-04 11:34:43 浏览:797