Linux C编程第二回 - GCC

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



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值