linux程序编译

来源:互联网 发布:centos twisted 编辑:程序博客网 时间:2024/06/05 22:54

一、安装linux操作系统(ubuntu)。

        http://blog.csdn.net/sshhbb/article/details/6651807

二、学会最简单linux操作命令。

       http://blog.csdn.net/sshhbb/article/details/6704626

三、学会使用vim编辑你的程序。

       http://blog.csdn.net/sshhbb/article/details/6705564

四、使用GCC编译程序。

       gcc所遵循的部分约定规则:

  .c为后缀的文件,C语言源代码文件;

  .a为后缀的文件,是由目标文件构成的档案库文件;

  .C,.cc或.cxx 为后缀的文件,是C++源代码文件;

  .h为后缀的文件,是程序所包含的头文件;

  .i 为后缀的文件,是已经预处理过的C源代码文件;

  .ii为后缀的文件,是已经预处理过的C++源代码文件;

  .m为后缀的文件,是Objective-C源代码文件;

  .o为后缀的文件,是编译后的目标文件;

  .s为后缀的文件,是汇编语言源代码文件;

  .S为后缀的文件,是经过预编译的汇编语言源代码文件。

       

       gcc执行过程:

         

         当使用gcc时,gcc会完成预处理、编译、汇编和连接。前三步分别生成目标文件,连接时,把生成的目标文件链接成可执行文件。gcc可以针对支持不同的源程序文件进行不同处理,文件格式以文件的后缀来识别.

        

在预处理阶段,输入的是C语言的源文件,通常为*.c。它们通常带有.h之类头文件的包含文件。这个阶段主要处理源文件中的#ifdef、 #include和#define命令。该阶段会生成一个中间文件*.i,但实际工作中通常不用专门生成这种文件,因为基本上用不到;若非要生成这种文件不可,可以利用下面的示例命令:

gcc -E  test.c -o test.i

在编译阶段,输入的是中间文件*.i,编译后生成汇编语言文件*.s 。这个阶段对应的GCC命令如下所示:

GCC -S test.i -o test.s

在汇编阶段,将输入的汇编文件*.s转换成机器语言*.o。这个阶段对应的GCC命令如下所示:

GCC -c test.s -o test.o

最后,在连接阶段将输入的机器代码文件*.s(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代码文件。这一步骤,可以利用下面的示例命令完成:

GCC test.o -o test

         示例代码 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的使用

      http://blog.csdn.net/sshhbb/article/details/6705636

五、运行你的第一个linux程序。

        直接命令行处输入:./程序名 即可运行你linux平台下的第一个C程序了。

原创粉丝点击