linux 下初学使用gcc编程

来源:互联网 发布:如何评价江的政绩 知乎 编辑:程序博客网 时间:2024/06/05 01:33

       gcc是GNU C Compiler的缩写,是Linux下一款功能强大的编译器。它支持多种硬件平台,并且编译出的可执行代码执行效率较高。下面我们就一起学习如何使用它。奋斗

       首先,简单介绍一下程序的编译与链接原理。c语言是一种高级语言,它的编译过程分为预编译和编译两个过程。预编译过程主要是对源程序中的伪代码(以#开头的指令)和符号进行处理的过程。经过预编译处理后,将生成一个没有宏定义/没有条件编译指令/没有特殊符号,只有常量/变量的定义以及C语言的关键字等信息的新源程序。编译的过程是将预编译之后的源程序转换成汇编程序,再将汇编程序转换成二进制目标代码的过程。经过编译得到的二进制代码虽然是机器语言代码,但还不能直接执行,还需要链接函数库之后才能成为可执行程序。

图1 编译过程

      对编译链接原理有了简单的了解之后,我们学习一下如何编写一些简单的程序。微笑

      首先,在屏幕上打印“Hello World!”

      打开vim编译器

      vim hello.c

      然后在打开的vim编译器输入我们的程序

     #include<stdio.h>
int main (void)
{
        printf("Hello World!\n");
}

     下面就要进行编译链接了

      gcc -c hello.c   #编译,会生成hello.o文件

      gcc -o hello hello.o   #进行链接,生成hello可执行文件,缺省可执行文件名称时,默认为a.out

     然后就可以在shell下执行了

     ./hello

     运行结果

     Hello World!
    

     在编译链接过程中,我们用到了gcc命令,这个命令到底怎么用,有哪些参数可以选择,下面我们就学习学习一下:

     -c:只进行编译,而不进行链接。-c选项输出的是与源文件同名的.o后缀文件。

     -S:输出与源文件同名的.s汇编代码文件。

     -o:链接形成可执行文件。该选项后面可接要生成的可执行文件名称,缺省情况下,默认为a.out

     -g:产生符号调试工具(gdb)所必要的符号信息。对代码进行调试时,需要加入。

    此外,还可以加入-Idirname  -Ldirname -lname等选项,感兴趣的朋友可以自学一下。 


    然后,我们再学习一下如何在主程序里面调用另一个子程序。

    第一步,需要编写主程序

    vim thanks.c

    #include<stdio.h>
int main(void)
{
        printf("Hello World\n");
        thanks_2();
}
    编写被调用的子程序thanks_2
   vim thanks_2.c

#include<stdio.h>
void thanks_2(void)
{
        printf("Thank you!\n");
}

    第二步,对程序进行编译与链接(过程和“Hello World”类似)  

   gcc -c thanks.c thanks_2.c

   gcc -o thanks thanks.o thanks_2.o

   下面就可以执行了

    ./thanks

     结果如下

Hello World
Thank you!

      上面讲的是一些基本的操作,下面举例学习一下如何调用外部函数库。

     第一步,编写源程序

     vim sin.c

     #include<stdio.h>
#include<math.h>
int main(void)
{
        float value;
        value = sin(3.14/2);
        printf("%f\n",value);
}


   第二步,编译链接

  gcc -o sin sin.c -lm


   执行

   ./sin

  运行结果

  1.000000

    上面主子程序的编写不用多说,重点是在编译链接过程。

       gcc -o sin sin.c -lm


    -l:表示加入某个函数库(library)的意思;

    m:加入libm.so函数库

    其实,上面shell命令如果不缩写的话,应该为

      gcc -o sin sin.c -lm -L/lib -L/usr/lib

    -L:制定了链接时用到的库文件所在的目录。Linux默认将函数库放置在/lib与/usr/lib当中,所以只调用这两个函数库时,可以不指定。否则,就要使用-L/path

   

    好了,有关gcc的一些简单的操作就可以了  大笑






















原创粉丝点击