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的一些简单的操作就可以了
- linux 下初学使用gcc编程
- Linux下使用gcc编程初体验
- Linux下编程开发初学
- Linux系统下gcc编程的基本使用教程
- linux下GCC编程基础
- linux 下gcc编程入门
- linux 下gcc编程入门
- linux下gcc基本使用
- Linux下GCC使用入门
- Linux 下Gcc的使用
- Linux下GCC的使用
- Linux下C多线程编程初学
- Linux下C多线程编程初学
- Linux下GCC编程四个过程
- Linux下GCC编程四个过程(1)
- Linux下GCC编程四个过程(2)
- Linux下GCC编程四个过程(3)
- Linux下GCC编程四个过程
- PHP新的垃圾回收机制
- phpstorm修改快捷键
- java长连接
- 把大象放进冰箱——技术型复杂项目的特性裂解
- 2012年新生网银工具EGOPAY详细图文注册及使用教程
- linux 下初学使用gcc编程
- •data structures using c: 3.3: expanding and contracting lists-(2013/11/20)
- 直接拿来用!最火的iOS开源项目
- 怎么用javascript做一个文字滚动效果?
- 使用DBUnit集成Spring简化测试
- 在vs2008中编写c控制台程序,运行完后经常一闪而过解决办法。
- 突然觉得好心酸
- 为UIView绘制单边的boder
- 终于要开始学习SSH框架了