Chinaunix首页 | 论坛 | 博客
  • 博客访问: 199270
  • 博文数量: 67
  • 博客积分: 375
  • 博客等级: 一等列兵
  • 技术积分: 525
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-29 22:28
文章分类

全部博文(67)

文章存档

2021年(2)

2019年(1)

2018年(19)

2017年(23)

2016年(4)

2011年(18)

我的朋友

分类: C/C++

2011-04-29 22:33:43

用gcc编译
以下是例子
实例代码:
/*
* hello.c - Canonical "Hello, World!" program
*/
#include
int main(void)
{
printf("Hello,Linux programming world!\n");
return 0;
}
在命令行上键入以下命令编译和运行这段程序:
$gcc hello.c -o hello
$./hello
Hello, Linux programming world!
第一行命令告诉gcc对源代码hello.c进行编译和链接,并使用-o参数指定创建名为hello的可见程序.第二行命令执行hello这个程序,第三行是程序的执行结果.

其实,gcc首先运行预处理程序cpp来展开hello.c中的宏并在其中插入#include文件所包含的内容:然后把预处理后的源代码编译成为目标代码;最后,链接程序ld创建一个名为hello的二进制文件.

现在我们来通过手工操作重新创建这些步骤,以逐步执行编译过程.第一布是运行预处理器.使用-E选项告诉gcc在预处理后停止编译过程:
$gcc -E hello.c -o hello.cpp
此时查看hello.cpp会发现stdio.h的内容确实都插到文件里去了,而其他应当被预处理的标记也做了类似处理.
下一步是将hello.cpp编译为目标代码.可使用gcc的-c选项来完成:
$gcc -x cpp-output -c hello.cpp -o hello.o
-x选项告诉gcc从指定的步骤开始编译,在本例中也就是编译器处理后的源代码(cpp-output).
gcc是怎么知道如何处理某种特殊类型的文件呢?它是依靠文件的扩展名来决定如何正确处理该文件的.
——————————————————————————————
扩展名 类型
.c C语言源代码
.C,.cc C++语言源代码
.i 预处理后的C源代码
.ii 预处理后的C++源代码
.S,.s 汇编语言源代码
.o 编译后的目标代码
.a,.so 编译后的库代码
———————————————————————————————
最后,链接目标文件,生成二进制代码.
$gcc hello.c -o hello
阅读(868) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~