Linux编程——GCC的使用
来源:互联网 发布:宿舍楼网络规划 编辑:程序博客网 时间:2024/06/05 15:33
工欲善其事, 必先利其器。而gcc是Linux系统下最常见的编译器,本文学习gcc 编译器的使用。
gcc 支持编译的一些源文件后缀名
gcc 编译程序的流程
Linux的可执行文件并没有像 Windows 那样有明显的.exe后缀名, 只需向其分配x(可执行)权限即可 sudo chmod +x excutefile
作为Linux程序员,我们可以让gcc在编译的任何阶段结束,以便检查或使用该阶段的输出(这个很重要)
用 gcc 编译一个经典 C 程序
打开的vim环境中输入i进入编辑模式,输入以下代码:
// filename: hello.c#include <stdio.h>int main(int argc, char **argv){ printf("Hello, Linux!");}/** *在Terminal打开后的界面中输入:$gcc hello.c -o hello *如果没有error,说明编译成功,将会在当前目录生成一个可执行文件 hello *继续输入:./hello 就会运行该程序,在bash上打印出 Hello, Linux! **/
保存为hello.c文件
gcc hello.c -o hello --- 第二个hello为文件名,名字任意取定(但是不能违反bash的规则)gcc hello.c -o
, 但是作为一名优秀的程序员还是取个有意义的名字吧!
从程序员的角度来看,一个简单的-o选项可以省略很多中间步骤一次性输出可执行文件; 但从编译器的角度来看,这条命令的背后是一系列的繁杂的工作。
gcc 到底背着我们做了什么
首先gcc会调用预处理程序cpp,由它负责展开在源程序中定义的宏(上例:#include <stdio.h>),向其中插入#include语句所包含的内容(原地展开stdio.h包含的代码)
在终端中输入
$ gcc -E hello.c -o hello.i
还记得.i后缀吗?hello.i这是一个经过预处理器处理之后的C源文件,在bash试试这个命令,然后用vim打开它。
gcc的-E参数可以让gcc在预处理结束后停止编译过程。
第二步,将hello.i编译为目标代码,gcc默认将.i文件看成是预处理后的C语言源代码,因此它会直接跳过预处理,开始编译过程。
$ gcc -c hello.i -o hello.o
同样,用vim打开.o文件看看和.i .c文件有什么不同?应该是一片乱码,是吧?(它已经是二进制文件了)
请记住,gcc预处理源文件的时候(第一步),不会进行语法错误的检查。
语法检查会在第二步进行,比如花括号不匹配、行末尾没有分号、关键字错误......
第三步,gcc连接器将目标文件链接为一个可执行文件,一个大致的编译流程结束
gcc hello.o -o hello
gcc 编译模块化的程序
现在很多软件都是采用的模块化开发,通常一个程序都是有很多个源文件组成,相应的就形成了多个编译单元。gcc能够很好的处理这些编译单元,最终形成一个可执行程序
代码编辑和输入参考上述使用vim程序输入,并在Terminal界面使用gcc进行编译。
// hello.hextern void print();
这是个头文件,将会在hello_main.c中调用
// hello_print.c#include <stdio.h>void print(){ printf ("Hello, Linux\n");}
// hello_main.c#include "hello.h"void print();int main(int argc, char **argv){ print();}// Terminal中 $gcc hello_print.c hello_main.c -o hello 进行编译// 将会打印出 Hello, Linux以上的
gcc hello_print.c hello_main.c -o hello
可以看成是执行了一下3条命令 $ gcc -c hello_print.c -o hello_print.o$ gcc -c hello_main.c -o hello_main.o$ gcc hello_print.o hello_main.o -o hello
- Linux编程——GCC的使用
- linux C编程之gcc的使用
- Linux C编程 GCC的使用
- Linux下C语言应用编程——GCC和GDB的使用
- Linux系统下gcc编程的基本使用教程
- Linux下C开发——gcc,gdb的使用
- Linux 下 C 开发—— gcc , gdb 的使用
- Linux C编程1——编程基础GCC
- linux 下初学使用gcc编程
- Linux下使用gcc编程初体验
- Linux的gcc的使用
- Linux编译器GCC的使用
- linux编译器GCC的使用
- Linux编译器GCC的使用
- Linux gcc编译器的使用
- Linux编译器GCC的使用
- Linux 下Gcc的使用
- Linux下GCC的使用
- 写文章与写程序
- leetcode 142: Linked List Cycle II
- OutMan——Foundation框架中的NSString类和NSMutableString类
- 安卓UI布局常见警告
- Linux MTD驱动下的Nand Flash驱动中 mtd->write_oob和ecc.write_oob
- Linux编程——GCC的使用
- 【技术小结1】实习40多天所接触的.NET知识点与心得
- ios上获取是否安装了某个程序
- Windows API Hook
- 国内外例子源码地址
- iOS开发——设计模式那点事
- 求三角形外心,两圆相交面积
- 国兰的起源与历史
- PHP中Yii1.0中文件上传