Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Linux编译器--gcc/g++使用

Linux编译器--gcc/g++使用方式

作者:阿赭ochre

文章主要介绍了C/C++程序的编译过程,包括预编译、编译、汇编和链接四个阶段,并详细解释了每个阶段的作用和具体操作,同时,还介绍了调试和发布版本的概念

一、预编译指令

1.1预处理功能

1.2指令

实例:

1.3问题扩展

为什么能在Linux下进行C/C++或者其他形式的开发呢?

二、编译(生成汇编)

实例:

gcc -S code.i -o code.s

三、汇编(生成二进制机器语言)

实例:

gcc -c code.s -o code.o

四、链接(生成可执行文件或库文件)

4.1库文件

我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?

答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到 系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用

如何查看Linux的动态库和静态库?

ls /usr/lib64/libc.so*

ls /usr/lib64/libc.a*

4.2目标文件和库的链接

动态链接

静态链接

4.3动态库和静态库的优缺点

实例:gcc code.c -o code.test

gcc code.c -o code.test_static -static

可以看出,按照静态链接的方式形成的可执行文件比动态链接形成的可执行文件大

五、debug和release

实例:gcc code.c -o code.test_debug -g

gcc code.c -o code.test_debug_static -g -static

实例:file code.test

file code.test_static

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文