Linux C编程第二回 - GCC

来源:互联网 发布:社会蜘蛛算法 编辑:程序博客网 时间:2024/06/05 10:31

Gcc是Linux下常用的C编译器,其实GCC也可以用来编译很多其他的语言,比如java,比如c++。

其实一直用的都是微软的IDE,但是用多了之后,感觉自己就被微软绑架了,离开了IDE就只能写个helloworld。接口,函数什么的全部都不记得,需要提示。这方面看来,虽然Gcc确实没有VS强大,但有些地方Gcc还是有他的优点的。据说Emacs可以搞得很强大,没去试过:)

整理了一下GCC下边常用的操作,因为有些不常用,所以记性不好的人就多总结吧。

关于文件的扩展名:

.a 静态库文件

.so 动态库文件

.s 汇编源文件

.o 目标文件

这里简单在总结一下编译的各个阶段

源文件 ----------首先通过编译器的预处理程序,将代码中的#define,include之类的进行展开,成为机器处理的真正的源文件,如果想看到这一步的结果,可以通过gcc -E -o hello.cxx hello.c生成的.cxx文件来查看,helloworld也变成了800多行的文件。这个文件就是下边的预处理文件。

预处理文件----预处理文件通过汇编化生成下边的汇编程序,(中间历经词法,语法,语义分析)。如果想看到这一步的汇编代码,可以通过 gcc  -S -o hello.s hello.c来生成。

汇编文件-------汇编文件再通过编译,生成目标文件,这个目标文件其实已经是ELF文件了(Excutable and Linkable File). 可以通过gcc -c -o hello.o hello.c来生成目标文件。

目标文件-------目标文件通过最后的链接,才能变成可执行文件,我理解的链接主要是指重定向函数入口,重定向各种库在内存中的位置。什么参数都不要可以直接生成执行文件gcc hello.c, 会生成a.out, 通过./a.out可以执行。也可以gcc -o hello hello.c来指定生成的文件名。

可执行文件----好了执行吧


除了Hello world我们还常常需要静态库和动态库

这里的hello1.c和hello2.c是hello.c需要用到的函数文件

静态库的编译:

gcc -c hello1.c hello.2.c

ar -r libhello.a hello1.o hello2.o

gcc -o hello hello.c -lhello

动态库的编译使用:

gcc -c -fpic hello1.c hello2.c//这里不加-fpic也是可以运行的。

gcc -o hello.so -shared hello1.o hello2.o

cp hello.so /usr/lib

gcc -o hello hello.c hello.so



原创粉丝点击