Linux下C/C++学习1

      在Linux 下面,如果要编译一个C 语言源程序,我们要使用GNU 的gcc 编译器。下面
我们以一个实例来说明如何使用gcc 编译器。假设我们有下面一个非常简单的源程序
(hello.c):
int main(int argc,char **argv)
{
printf("Hello Linux\n");
}
要编译这个程序,我们只要在命令行下执行:
gcc -o hello hello.c

下面就详细说一下gcc的编译过程

gcc由C语言源代码文件生成可执行文件的过程,一般来说分为四个阶段:预处理(也称预编译Preprocessing)、编译(compilation)、汇编(Assembly)和链接(linking)。这四个阶段分别由gcc调用不同的程序来实现。
 


  • 预处理是调用cpp程序来实现的,预处理主要是对包含语句、宏定义等进行处理。
  • 编译是调用cc来实现的,它是源文件变为后缀为.o的目标文件的过程。
  • 汇编过程是对汇编语言的操作,通过调用as来实现,汇编同样也生成目标文件。
  • 链接是通过用ld来实现的。这是最为关键的步骤,在该阶段,ld会将各程序的执行代码放置在程序的适合位置,同时,程序调用的库函数也会以适当的方法设置调用接口。

      gcc编译时,如果在命令行没有指定其他参数,则gcc会完成编译、链接的过程,然后在当前目录中生成一个名为a.out的可执行文件。一般来说,linux并不依赖文件的后缀来识别文件是否为可执行程序,其判断文件是否可执行依据的是文件的属性。如果对于当前用户而言,文件有运行权限,则该文件为一个可执行程序。
      对于gcc而言,判断文件的类型主要是依据文件的后缀名。所以,要使用gcc编译代码,正确使用文件后缀是保证编译正确的前提。如果写了一个C++代码,却使用了.c为后缀,gcc在编译该文件时会将该文件按照C语言代码来处理,一般会出错。




      一些gcc常用的文件后缀名:

  • c: C语言源代码文件
  • a:由目标文件构成的档案库文件
  • .C、.cc 或.cxx:c++源代码文件
  • h:头文件
  • i:经过预处理的C源代码文件
  • ii:经过预处理的C++源代码文件
  • m:Objective-C源代码文件
  • o:编译后的目标文件
  • s:汇编语言源代码文件
  • S:经过预编译的汇编语言源代码文件

    gcc hello.c编译通过后,就可以简单的使用a.out调用该程序,使用命令如下:./a.out
  • 注意:这里不能直接使用a.out来调用该程序,因为shell在寻找可执行程序时,并不在当前目录中寻找,所以必须用“./”来显示指定该文件的路径是当前目录

posted on 2012-03-19 11:08 Daywei 阅读(428) 评论(0)  编辑 收藏 引用 所属分类: Linux


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2015年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章档案

牛人博客

搜索

积分与排名

最新评论

阅读排行榜