gcc/g++的简介
GCC(英文全拼:GNU Compiler Collection)是 GNU 工具链的主要组成部分,是一套以 GPL 和 LGPL 许可证发布的程序语言编译器自由软件,由 Richard Stallman 于 1985 年开始开发。gcc是GCC中的C语言编译器,而g++是GCC中的C++编译器,使用g++同样可以编译C语言。编译C语言要经过预处理,编译,汇编,链接这四个过程。
格式 : gcc [选项] 要编译的文件 [选项][目标文件]
选项 :
-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面,一般而言经过预处理后的文件命名统一格式为 xxx.i
-S 编译到汇编语言不进行汇编和链接,一般而言经过编译后的文件命名统一格式为 xxx.s
-c 编译到目标代码,一般而言经过汇编后的文件命名统一格式为 xxx.o
-o 文件输出到文件
-static 此选项对生成的文件采用静态链接
-g 生成调试信息。GNU 调试器可利用该信息。
-shared 此选项将尽量使用动态库
-O0 -O1 -O2 -O3 编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高
-w 不生成任何警告信息。
-Wall 生成所有警告信息
预处理(进行宏替换)
如何在vim中同时编辑多个文件
1.输入命令vim 文件1 文件2 ,例如vim test.c test.i
2.在底行模式用ls
命令查看缓冲区, %a表示正在编辑的文件
3. 使用分屏(Split Screen),在命令模式按下Ctrl + W
, s
进入分屏模式,该为上下分屏,或者Ctrl + W
, v该为左右分屏,例如以下为左右分屏
4. 在左右两屏中切换,在命令模式按下Ctrl + W
, w 可以在两屏中来回切换
5.切换编辑的文件,在底行模式按bnext,可以切换到第二个文件
6. 保存退出
保存所有并退出:wqa
编译(生成汇编)
汇编(生成机器可识别代码)
链接(生成可执行文件或库文件)
我们的C语言内部,调用很多库函数,比如printf,scanf等等。它们并没有在编译的时候展开,不信你可以回去看看那个.i文件,绝对没有展开一个叫做printf的函数。那么C语言要如何拿到这个函数,并调用它呢?这就涉及到链接的过程。如果你想要让你的.c,.i,.s,.o中的任意一个文件变成链接后的文件,不用带任何选项,直接执行gcc即可,因为直接执行就是生成可执行文件,这已经是链接后的文件了。这样最后生成的test就是可执行文件了,在Windows中,可执行文件的后缀就是.exe,因为Windows通过后缀区分文件,而Linux不通过后缀区分文件.
实例: gcc test.o –o test
函数库
1. lld 命令
功能:可以通过ldd
指令来查看一个可执行文件链接了那些库
比如第二行的libc
就是C语言的标准库。另外的,它还指明了一些库在系统中的路径。也就是说我们的很多头文件,都已经早早地在Linux
中下载好了,因此我们可以在Linux
上运行C语言代码。
比如说/usr/include
路径下的文件:
2. 函数库一般分为静态库和动态库两种
Linux
中,动态库以.so
为后缀,静态库以.a
为后缀在
Windows
中,动态库以.dll
为后缀,静态库以.lib
为后缀
-static
:
动态链接
优点 :省空间(磁盘的空间,内存的空间),程序体积小,加载速度快
缺点 :依赖动态库,程序运行可移植性较差
静态链接
优点: 不依赖第三方库,程序运行可移植性较好
缺点:浪费空间(磁盘的空间,内存的空间),程序体积大,加载速度慢