当前位置:首页 » 编程软件 » 文件在编译

文件在编译

发布时间: 2023-05-29 18:55:56

编译器在编译阶段,究竟做哪些事情

1. 预处理首先源代码文件(.c/.cpp)和相关头文件(.h/.hpp)被预处理器cpp预编译成.i文件(C++为.ii)。预处理命令为:gcc –E hello.c –o hello.i预编译过程主要处理那些源代码中以#开始的预编译指令,主要处理规则如下:u 将所有的#define删除,并且展开所有的宏定义;u 处理所有条件编译指令,如#if,#ifdef等;u 处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。该过程递归进行,及被包含的文件可能还包含其他文件。u 删除所有的注释//和 /**/;u 添加行号和文件标识,如#2 “hello.c” 2,以便于编译时编译器产生调试用的行号信息及用于编译时产生编译错误或警告时能够显示行号信息;u 保留所有的#pragma编译器指令,因为编译器须要使用它们。2. 编译编译过程就是把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件(.s)。编译的命令为:gcc –S hello.i –o hello.s或者从源文件直接输出汇编代码文件:gcc –S hello.c –o hello.s现在版本的GCC把预编译和编译两个步骤合并成一个步骤,由程序cc1来完成(C++为cc1plus)。3. 汇编汇编就是将汇编代码转变成机器可以执行的命令,生成目标文件(.o),汇编器as根据汇编指令和机器指令的对照表一一翻译即可完成。汇编的命令为:gcc –c hello.s –o hello.o或者从源文件直接输出目标文件:gcc –c hello.c –o hello.o4. 链接链接就是链接器ld将各个目标文件组装在一起,解决符号依赖,库依赖关系,并生成可执行文件。链接的命令为:ld –static crt1.o crti.o crtbeginT.o hello.o –start-group –lgcc –lgcc_eh –lc-end-group crtend.o crtn.o一般我们使用一条命令就可以完成上述4个步骤:gcc hello.c实际上gcc只是一些其它程序的包装,它会根据不同参数去调用预编译编译程序cc1、汇编器as、链接器ld。

❷ 在VIM里面是怎样编译c语言的文件

一、首先要会使用vim编写一个c文件
1.在linux终端下输入:
vi
test.c
表示生成了一个test.c的c语言文件
2.此时时命令模式,按"a"键或者"i"进入输入模式,然后就是输入C语言代码
3.保存文件,再次回到命令模式,按"ESC“键,然后按":"键再输入"wq”表示保存退出
二、然后在用gcc编译test.c文件
直接输入
gcc
-o
mytest
test.c即可
表示直接生成mytest执行文件

❸ 在linux中,怎么用gcc编译文件

在终端中输入 gcc 文件名 -o 目标文件名
然后 ./目标文件名 就行了,没有目标文件名,自动存为 a
执行 ./a 就行了。

在使用Gcc编译器的时候,我们必须给出一系列必要的调用参数和文件名称。GCC编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。
GCC最基本的用法是∶gcc [options] [filenames]
其中options就是编译器所需要的参数,filenames给出相关的文件名称。
-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。
-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。
-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。
-O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。
-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。
-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。C程序中的头文件包含两种情况∶
A)#include <myinc.h>
B)#include “myinc.h”
其中,A类使用尖括号(< >),B类使用双引号(“ ”)。对于A类,预处理程序cpp在系统预设包含文件目录(如/usr/include)中搜寻相应的文件,而B类,预处理程序在目标文件的文件夹内搜索相应文件。

GCC执行过程示例

示例代码 a.c:
#include <stdio.h>
int main()
{
printf("hello\n");
}
预编译过程:
这个过程处理宏定义和include,并做语法检查。
可以看到预编译后,代码从5行扩展到了910行。
gcc -E a.c -o a.i
cat a.c | wc -l
5
cat a.i | wc -l
910
编译过程:
这个阶段,生成汇编代码。
gcc -S a.i -o a.s
cat a.s | wc -l
59
汇编过程:
这个阶段,生成目标代码。
此过程生成ELF格式的目标代码。
gcc -c a.s -o a.o
file a.o
a.o: ELF 64-bit LSB relocatable, AMD x86-64, version 1 (SYSV), not stripped
链接过程:
链接过程。生成可执行代码。链接分为两种,一种是静态链接,另外一种是动态链接。使用静态链接的好处是,依赖的动态链接库较少,对动态链接库的版本不会很敏感,具有较好的兼容性;缺点是生成的程序比较大。使用动态链接的好处是,生成的程序比较小,占用较少的内存。
gcc a.o -o a
程序运行:
./a
hello
编辑本段
GCC编译简单例子

编写如下代码:
#include <stdio.h>
int main()
{
printf("hello,world!\n");
}
执行情况如下:
gcc -E hello.c -o hello.i
gcc -S hello.i -o hello.s
gcc -c hello.s -o hello.o
gcc hello.c -o hello
./hello
hello,world!

❹ 被包含文件是在编译时先单独生成目标文件,然后连接到可执行文件中去. 对吗

不知道你是说那种语言,如果是C/C++的话,一般我们使用#include指令包含头文件(当然,头文件也是可以有实现),编译器首先通过预编译,将所有使用#include的地方全部使用包含的文件替换,然后在执行编译,所以被包含不会生成单独的目标文件
生成单独的目标文件一般是头文件的实现文件,头文件的实现就是先编译成单独的目标文件,然后通过链接器连接到一起,成为一个完整的可执行文件

❺ cpp文件在VS2010环境下如何编译

无论VS2010还是VC6,都需要工程才能编译链接和执行(TC不需要)
根据代码的具体情况创建对应的工程,并将CPP复制到工程目录并加入到工程即可。
一般控制台工程和win32 console的可能性比较大。

❻ 如何在linux上编译c工程文件

linux终端下,编译C语言程序步骤为:采用vi进行源代码编写,编写完成后,:wq存盘退出,如:vi test.c
在命令行下,运行gcc编译程序,生成执行码,如:gcc -o test test.c-o 表示指明生成的执行码名称
运行编译后的执行码./test

❼ 如何在Windows下用命令行编译C/C++文件

在控制台编译运行一个C程序,在windows上的c语言编译器为cl.exe,在linux平台上的c语言编译器是gcc。
在命令提示符中,执行cl
test.c(test.c是c语言源码文件)。下图是用cl编译器编译main.cxx的谁的,并且执行生成的程序main.exe。

❽ C语言,头文件总是无法在编译中出错

可能是你编译器设置的问题,看看设置的缺省目录是否正确。另外当前目录包含头文件用双引号不用尖括号即:

#include "stdint.h"

热点内容
服务器web访问端口怎么查看 发布:2024-05-06 07:35:28 浏览:225
苹果id改密码要什么条件 发布:2024-05-06 07:34:47 浏览:805
镇江节点服务器测试ip 发布:2024-05-06 07:15:05 浏览:540
sqlserver表格 发布:2024-05-06 07:09:54 浏览:612
雪铁龙凡尔赛选哪个配置 发布:2024-05-06 06:56:04 浏览:571
福睿斯配置怎么样 发布:2024-05-06 06:50:16 浏览:103
微生物数据库 发布:2024-05-06 06:47:33 浏览:605
原神和steam游戏哪个需要配置 发布:2024-05-06 06:37:40 浏览:666
nginx访问403 发布:2024-05-06 05:56:39 浏览:677
android上传图片参数 发布:2024-05-06 05:56:04 浏览:221