凡科建设网站的步骤,hreflang wordpress,安徽省住房和城乡建设工程信息网,网站建设工作台账转自#xff1a;https://blog.csdn.net/bit_clearoff/article/details/53965514 Windows中我们常用vs来编译编写好的C和C代码#xff1b;vs把编辑器#xff0c;编译器和调试器等工具都集成在这一款工具中#xff0c;在Linux下我们能用什么工具来编译所编写好的代码呢#…转自https://blog.csdn.net/bit_clearoff/article/details/53965514 Windows中我们常用vs来编译编写好的C和C代码vs把编辑器编译器和调试器等工具都集成在这一款工具中在Linux下我们能用什么工具来编译所编写好的代码呢其实Linux下这样的工具有很多但我们只介绍两款常用的工具它们分别是gcc和g.
工具用法介绍
gcc和g的用法都是一样的在这里我们只介绍gcc
上图介绍了相关指令和参数以及该条指令所做的对应的事情。
gcc -E filename.c -o filename.i 将c文件转化成C文件,这个过程也叫做预处理过程gcc -S filename.i -o filename.s 将预处理过程生成的.i后缀的文件转化成汇编文件里面存储的是相应的汇编代码这个过程叫做编译。gcc -c filename.s -o filename.o 将汇编文件中的汇编代码翻译成相应的机器语言这个过程叫做汇编。gcc filename.o -o filename.exe 这条指令是完成链接这个过程的它通过链接器ld将运行程序的目标文件和库文件链接在一起生成最后的可执行文件生成可执行文件后我们就能够调用相应的程序了。 注意由于g和gcc的用法相同所以在这里我们就不直接介绍了
gcc和g的区别
编译c程序
熟悉C的人应该都知道C是C语言的超集编写C/C代码的时候有人用gcc也有人用g,我们先来看看gcc和g是否都能编译C和C代码 上图中我们发现用gcc和g分别编译test.c这个c文件发现都是可执行的实际上对于C文件gcc和g所做的事情确实是一样的g在编译C文件时调用了gcc.
编译cpp程序
既然二者对c程序来说都一样的那为什么两者都存在而不是只存在一个呢,不要着急下面我们来看看他们分别是如何来编译C程序的. 首先我们直接编译c文件生成可执行程序 我们发现gcc报错而g没有报错并且可以执行。
下面我们来看看它们的具体步骤以及错误原因:
预处理 在预处理阶段两条命令都能够成功并且我们观察gcc和g各自产生的.i后缀的文件它们的内容都是相同的所以我们能够发现gcc和g在cpp程序中它们做了相同的事情。编译 我们发现gcc编译test1.i(.cpp生成)的会出现大篇幅的错误图片中的错误主要是说无法找到cout函数的库文件而g去可以通过编译并且生成汇编文件,这件事情说明gcc无法自动和c的库文件进行连接导致了库函数没有申明的错误.汇编 这个过程应该都没有问题因为这个过程只是将后缀为.s文件中的汇编语言转换成了相应的机器语言。所以gcc和g应该在这个过程中做了同样的事情。链接 这个阶段也出现了问题用gcc将.cpp后缀产生的.o文件转换成可执行文件时出现了错误而g却可以转换成功并且能够正确执行。这个还是因为gcc无法将库文件与.o后缀的文件关联在一起生成可执行程序而g可以完成这项工作。
总结
gcc和g的区别主要是在对cpp文件的编译和链接过程中因为cpp和c文件中库文件的命名方式不同那为什么g既可以编译C又可以编译C呢这时因为g在内部做了处理默认编译C程序但如果遇到C程序它会直接调用gcc去编译.