免费网线,seo外链怎么做,室内设计公司图片,美食网站设计网站一、gcc/g是什么
gcc的全称是GNU Compiler Collection#xff0c;它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器#xff08;GNU C Compiler#xff09;#xff0c;现在除了c语言#xff0c;还支持C、java、Pascal等语言。gcc支持多种硬件平台
二、gc…一、gcc/g是什么
gcc的全称是GNU Compiler Collection它是一个能够编译多种语言的编译器。最开始gcc是作为C语言的编译器GNU C Compiler现在除了c语言还支持C、java、Pascal等语言。gcc支持多种硬件平台
二、gcc编译程序过程
gcc编译程序主要经过四个过程预处理、编译、汇编、链接 gcc编译程序过程 预处理
预处理的功能进行宏替换
预处理功能主要包括宏定义,文件包含,条件编译,去注释等
预处理指令是以#号开头的代码行 实例: gcc -E gcc_test.c -o gcc_test.i 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程
选项“-o”是指目标文件,“.i”文件为已经过预处理的C原始程序
编译
编译的功能生成汇编
在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查 无误后,gcc 把代码翻译成汇编语言
用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码 实例: gcc -S gcc_test.i -o gcc_test.s 汇编
汇编的功能生成机器可识别代码
汇编阶段是把编译阶段生成的“.s”文件转成目标文件
读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了 实例: gcc -c gcc_test.s -o gcc_test.o 链接
链接的功能生成可执行文件或库文件
在成功编译之后就进入链接阶段 实例: gcc gcc_test.o -o gcc_test 注意使用gcc gcc_test.c可以一次性完成上述的所有任务
函数库
我们的C程序中并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而 没有定义函数的实现,那么,是在哪里实“printf”函数的呢?
系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到 系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函 数“printf”了,而这也就是链接的作用 使用ldd可以查看当前可执行文件依赖的库 实例: ldd gcc_test 函数库一般分为静态库和动态库两种
静态库在编译链接时将库文件代码全部加入可执行文件中因此生成的文件比较大但在运行时并不需要库文件。一般为“.a”后缀
动态库在编译链接时并不把库文件加入可执行文件而是在程序执行时链接文件加载库从而节省系统的开销。一般为“.so”后缀
动态库是被所有人共享的如果动态库崩溃会导致网络上的用户一段时间内都无法链接 使用gcc gcc_test.c -o gcc_test_static -static 命令可以生成静态库文件 从下图可以看出使用静态库生成文件会导致文件的大小增加几十倍不止 如果出现如下错误是由于使用云服务器不具有静态库 使用如下指令下载即可 sudo yum install -y glibc-static c静态库
sudo yum install glibc-static libstdc-static -y c静态库三、gcc选项
选项名功能-o产生目标.i、.s、.o可执行文件等-E只运行C预编译器-S告诉编译器产生汇编程序文件后停止编译并生成汇编文件后缀为.s -c通知gcc取消链接步骤并在最后生成目标文件-Wall使gcc对源文件的代码有问题的地方发出警告-Idir将dir目录加入搜索头文件的目录路径-Ldir将dir目录加入搜索库的目录路径-llib链接lib库-g在目标文件中嵌入调试信息
四、CentOs7下的gcc与g安装
在bash下直接下载
sudo yum install -y gcc gcc-c查看版本号
gcc --version
g --version如果在执行yum install的过程中出现
Another app is currently holding the yum lock; waiting for it to exit…
运行命令
rm -f /var/run/yum.pid // 强制关掉yum进程