网站前端是什么意思,建设网站需要什么硬件设施,哪里有网站设计公司,生活+装修 北京卫视咱们继续进阶#xff0c;接下来进入到Linux工具中gcc和g的学习在本章博客正式开始介绍之前#xff0c;我们先要弄清楚程序是怎么翻译的#xff1a;C语言程序环境一、什么是gcc/g#x1f4cc;gcc是一个c编译器#xff0c; g是c编译器。我们根据代码的后缀名来判断用哪个编译…咱们继续进阶接下来进入到Linux工具中gcc和g的学习在本章博客正式开始介绍之前我们先要弄清楚程序是怎么翻译的C语言程序环境一、什么是gcc/ggcc是一个c编译器 g是c编译器。我们根据代码的后缀名来判断用哪个编译器若代码后缀名是.c就用gcc,若代码后缀名是.cpp就用g编译器由于gcc和g编译原理和操作都相同在本期博客中主要讲述gcc的使用g同理二、gcc的使用2.1 直接使用gccgcc可以直接使用具体操作为gcc 想要进行编译文件的文件名直接使用gcc后文件将会被翻译为可执行文件❗注意直接使用gcc编译出的可执行文件名默认为a.out举例我们首先写好一个.c文件用gcc来编译这个文件发现会生成一个a.out可执行文件我们来运行一下这个可执行文件2.2 gcc -o要想gcc编译完的可执行文件的文件名不想为a.out该怎么办呢我们可以在gcc后面加上-o选项具体操作为gcc 想要编译的文件的文件名 -o 生成可执行文件的文件名 或 gcc -o 生成可执行文件的文件名 想要编译的文件的文件名举个栗子2.3 gcc -E如果我们不想编译完文件而只是想预处理一下源文件该如何操作呢在gcc后面加上-E选项就可以只对源文件进行预处理操作具体操作为gcc -E 想要预处理的文件的文件名 例如我们预处理一下这个test.c文件并将预处理的结果放到test.i文件中(现在我们来对比一下两个文件)可以看到test.i文件中很好的对代码进行了预处理2.4 gcc -S在gcc后面加上-E选项就可以只对文件进行编译操作转换为二进制代码具体操作为gcc -S 想要编译的文件的文件名 想要编译的文件可以是源文件也可以是预处理后的文件例如我们现在将预处理后的test.i文件编译一下放到test.s中现在我们看一下编译后的代码2.5 gcc -c在gcc后面加上-E选项就可以只对文件进行汇编操作转换为二进制目标文件具体操作为gcc -c 想要汇编的文件的文件名 想要编译的文件可以是源文件、预处理后的文件和编译后的文件例如我们现在将编译后的test.s文件汇编一下放到test.o中来看一下汇编后文件三、谈谈链接从上面我们很好的看到源文件所被预处理、编译和汇编的过程但是链接的过程呢我们在直接使用gcc时所生成的可执行文件已经被链接过了那它链接了什么内容呢在Linux环境下可以使用ldd指令来查看文件所链接的内容具体操作为ldd 想要查看文件所链接内容的文件名例如我们可以看到该文件链接了三个内容接下来有一个问题我们为什么能够在Linux环境下进行c/c代码的编写和编译呢这是因为Linux系统默认已经携带了语言级别的头文件和语言相对应的库Linux环境下的库分为两种静态库和动态库本质上都是文件静态库的命名格式为libXXXXXXX.a.版本号动态库的命名格式为libXXXXXXX.so.版本号以及我们在vs2022环境下可以编写和编译代码也是因为vs环境帮助我们下载安装了头文件和库文件那静态库和动态库有什么区别呢1.静态库专门让编译器对用户的程序进行静态链接的动态库专门让编译器对用户的程序进行动态链接的2.静态库和静态链接:链接的时候如果是静态链接找到静态库拷贝静态库中的我所需要的代码到我自己的可执行程序中相关的位置3.动态库和动态链接:链接的时候如果是动态链接找到动态库拷贝动态库中的我所需要的代码的地址到我自己的可执行程序中相关的位置4.静态链接成功:程序不依赖任何库自己就可以独立运行5.动态链接成功:程序还是依赖动态库一旦动态库缺失程序便无法运行!6.静态库因为自身拷贝的问题比较浪费空间7.动态库因为可以做到被大家共享方法所以真正的实现永远都是在库中程序内部只有地址比较节省空间8.静态库vs动态库 Linux默认使用的是动态链接和动态库!既然Linux环境下默认是动态链接那么我们如果想以静态链接的方式编译文件该该怎么办呢我们可以在gcc指令后面加上-static选项例如我们先对gcc默认编译的test.exe文件进行ldd和file查看一下链接和类型可以看到该文件是动态链接的现在我们来使用-static选项来静态链接编译一个可执行文件可以看到该静态链接的文件比动态链接文件大了100倍!❗注意如果大家在使用-static选项有这样的报错这是因为自己LInux环境下没有安装静态库使用下面两条指令安装一下即可yum install -y glibc-staticC语言静态库yum install -y glibc-static libstdc-staticC静态库Linux下gcc和g工具到这里就给大家讲述完了恭喜各位通关成功~我们下一期见~