欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年gcc入门教程 .pdf

    • 资源ID:39726999       资源大小:146.25KB        全文页数:14页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年gcc入门教程 .pdf

    不经意间,GCC 已发展到了4.3 的版本,尽管在软件开发社区之外乏人闻问,但因为GCC在几乎所有开源软件和自由软件中都会用到,因此它的编译性能的涨落会直接影响到Linux、Firefox 乃至于 OpenOffice.org 和 Apache 等几千个项目的开发。因此,把GCC 摆在开源软件的核心地位是一点也不为过。另一方面,GCC4.3 的 出现,正在牵引着广大程序员们的心。如果我们非要用一个词来说明GCC 与程序员之间的关系,那无疑是 心随心动。历史篇作为自由软件的旗舰项目,Richard Stallman 在十多年前刚开始写作GCC 的时候,还只是把它当作仅仅一个C 程序语言的编译器;GCC 的意思也只是GNU C Compiler 而已。经过了这么多年的发展,GCC 已经不仅仅能支持C 语言;它现在还支持Ada 语言、C+语言、Java 语言、Objective C 语言、Pascal 语言、COBOL 语言,以及支持函数式编程和逻辑编程的Mercury 语言,等等。而GCC 也不再单只是GNU C 语言编译器的意思了,而是变成了GNU Compiler Collection 也即是GNU 编译器家族的意思了。另一方面,说到GCC 对于各种硬件平台的支持,概括起来就是一句话:无所不在。几乎所有有点实际用途的硬件平台,甚至包括有些不那么有实际用途的硬件平台。Gcc 简介Linux 系统下的gcc(GNU C Compiler)是 GNU 推出的功能强大、性能优越的多平台编译器,是 GNU 的代表作品之一。Gcc 是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%30%。官方网站:http:/gcc.gnu.org/gcc 是 linux 的唯一编译器,没有 gcc 就没有 linux,gcc 的重要性就不可言喻啦。居然这么重要,那就很值得我们来好好研究下啦。好啦,开始我们的gcc 之旅吧!首先消除gcc 和 g+误区吧。gcc 和 g+都是 GNU(组织)的一个编译器。误区一:gcc只能编译c代码,g+只能编译c+代码两者都可以,但是请注意:1.后缀为.c 的,gcc 把它当作是C 程序,而g+当作是 c+程序;后缀为.cpp 的,两者都会认为是 c+程序,注意,虽然c+是 c 的超集,但是两者对语法的要求是有区别的,例如:#include int main(int argc,char*argv)if(argv=0)return;printString(argv);return;int printString(char*string)sprintf(string,This is a test.n);如果按照C 的语法规则,OK,没问题,但是,一旦把后缀改为cpp,立刻报三个错:“printString未定义”;“cannot convert char*to char*”;名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 14 页 -”return-statement with no value“;分别对应前面红色标注的部分。可见C+的语法规则更加严谨一些。2.编译阶段,g+会调用 gcc,对于 c+代码,两者是等价的,但是因为gcc 命令不能自动和C程序使用的库联接,所以通常用g+来完成链接,为了统一起见,干脆编译/链接统统用 g+了,这就给人一种错觉,好像cpp 程序只能用g+似的。误区二:gcc不会定义 _cplusplus宏,而 g+会实际上,这个宏只是标志着编译器将会把代码按C 还是 C+语法来解释,如上所述,如果后缀为.c,并且采用gcc 编译器,则该宏就是未定义的,否则,就是已定义。误区三:编译只能用gcc,链接只能用g+严格来说,这句话不算错误,但是它混淆了概念,应该这样说:编译可以用gcc/g+,而链接可以用g+或者 gcc-lstdc+。因为 gcc 命令不能自动和C程序使用的库联接,所以通常使用 g+来完成联接。但在编译阶段,g+会自动调用gcc,二者等价。误区四:extern C 与 gcc/g+有关系实际上并无关系,无论是gcc 还是 g+,用 extern c 时,都是以C 的命名方式来为symbol命名,否则,都以c+方式命名。试验如下:me.h:extern C void CppPrintf(void);me.cpp:#include#include me.h using namespace std;void CppPrintf(void)cout Hellon;test.cpp:#include#include#include me.h int main(void)CppPrintf();return 0;1.先给 me.h 加上 extern C,看用 gcc 和 g+命名有什么不同名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 14 页 -rootroot G+#g+-S me.cpp rootroot G+#less me.s.globl _Z9CppPrintfv/注意此函数的命名.type CppPrintf,function rootroot GCC#gcc-S me.cpp rootroot GCC#less me.s.globl _Z9CppPrintfv/注意此函数的命名.type CppPrintf,function 完全相同!2.去掉 me.h 中 extern C,看用 gcc 和 g+命名有什么不同rootroot GCC#gcc-S me.cpp rootroot GCC#less me.s.globl _Z9CppPrintfv/注意此函数的命名.type _Z9CppPrintfv,function rootroot G+#g+-S me.cpp rootroot G+#less me.s.globl _Z9CppPrintfv/注意此函数的命名.type _Z9CppPrintfv,function 完全相同!【结论】完全相同,可见 extern C与采用 gcc/g+并无关系,以上的试验还间接的印证了前面的说法:在编译阶段,g+是调用 gcc 的。二:今天,我们继续gcc 之旅吧。上节我们讲了些gcc 的历史发展什么的,还有就是gcc与 g+的区别。今天我们就从整体上对gcc 编译过程有个细致的了解,也好明白他的工作原理,好为以后深入学习研究打下个基础。gcc 的编译流程分为四个步骤,分别为:预处理(Pre-Processing)编译(Compiling)-hello.i 汇编(Assembling)-hello.s 链接(Linking)以 hello.c 为例子,在这四个步骤中可以设置选项分别生成hello.i,hello.s,hello.o 以及最终的hello 文件:hello.c:最初的源代码文件;hello.i:经过编译预处理的源代码;hello.s:汇编处理后的汇编代码;hello.o:编译后的目标文件,即含有最终编译出的机器码,但它里面所引用的其他文件中函数的内存位置尚未定义。hello/a.out:最终的可执行文件名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 14 页 -(还有.a(静态库文件),.so(动态库文件),.s(汇编源文件)留待以后讨论)下面就具体来查看一下gcc 是如何完成四个步骤的。hello.c 源代码#include int main()printf(Hello World!n);return 0;(1)预处理阶段在该阶段,编译器将上述代码中的stdio.h 编译进来,并且用户可以使用gcc 的选项”-E”进行查看,该选项的作用是让gcc 在预处理结束后停止编译过程。深入理解计算机系统中是这么说的:预处理器(cpp)根据以字符#开头的命令(directives),修改原始的C 程序。如hello.c 中#include 指令告诉预处理器读系统头文件stdio.h 的内容,并把它直接插入到程序文本中去。结果就得到另外一个C 程序,通常是以.i 作为文件扩展名的。注意:Gcc 指令的一般格式为:Gcc 选项 要编译的文件选项 目标文件 其中,目标文件可缺省,Gcc 默认生成可执行的文件名为:编译文件.out ganlocalhost gcc#gcc E hello.c o hello.i 选项”-o”是指目标文件,”.i”文件为已经过预处理的C 原始程序。以下列出了hello.i 文件的部分内容:typedef int(*_gconv_trans_fct)(struct _gconv_step*,struct _gconv_step_data*,void*,_const unsigned char*,_const unsigned char*,_const unsigned char*,unsigned char*,size_t*);#2 hello.c 2 int main()printf(Hello World!n);名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 14 页 -return 0;由此可见,gcc 确实进行了预处理,它把”stdio.h”的内容插入到hello.i 文件中。(2)编译阶段接 下来进行的是编译阶段,在这个阶段中,Gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,Gcc 把代码翻译成汇编语言。用户可以使用”-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。汇编语言是非常有用的,它为不同高级语言不同编译器提供了通用的语言。如:C 编译器和Fortran编译器产生的输出文件用的都是一样的汇编语言。ganlocalhost gcc#gcc S hello.i o hello.s 以下列出了hello.s 的内容,可见Gcc 已经将其转化为汇编了,感兴趣的读者可以分析一下这一行简单的C 语言小程序是如何用汇编代码实现的。.file hello.c.section.rodata.align 4.LC0:.string Hello World!.text.globl main.type main,function main:pushl%ebp movl%esp,%ebp subl$8,%esp andl$-16,%esp movl$0,%eax addl$15,%eax addl$15,%eax shrl$4,%eax sall$4,%eax subl%eax,%esp subl$12,%esp pushl$.LC0 call puts addl$16,%esp movl$0,%eax leave 名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 14 页 -ret.size main,.-main.ident GCC:(GNU)4.0.0 20050519(Red Hat 4.0.0-8).section.note.GNU-stack,progbits(3)汇编阶段汇编阶段是把编译阶段生成的”.s”文件转成目标文件,读者在此可使用选项”-c”就可看到汇编代码已转化为”.o”的二进制目标代码了。如下所示:ganlocalhost gcc#gcc c hello.s o hello.o(4)链接阶段在成功编译之后,就进入了链接阶段。在这里涉及到一个重要的概念:函数库。在这个源程序中并没有定义”printf”的函数实现,且在预编译中包含进的”stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实现”printf”函数的呢?最后的答案是:系统把这些函数实现都被做到名为libc.so.6 的库文件中去了,在没有特别指定时,gcc会到系统默认的搜索路径”/usr/lib”下进行查找,也就是链接到libc.so.6 库函数中去,这样就能实现函数”printf”了,而这也就是链接的作用。函数库一般分为静态库和动态库两种。静态库是指编译链接时,把库文件的代码全部加入到可执行文件中,因此生成的文件比较大,但在运行时也就不再需要库文件了。其后缀名一般为”.a”。动态库与之相反,在编译链接时并没有把库文件的代码加入到可执行文件中,而是在程序执行时由运行时链接文件加载库,这样可以节省系统的开销。动态库一般后缀名为”.so”,如前面所述的libc.so.6 就是动态库。gcc 在编译时默认使用动态库。(Linux 下动态库文件的扩展名为.so(Shared Object)。按照约定,所有动态库文件名的形式是 libname.so(可能在名字中加入版本号)。这样,线程函数库被称作libthread.so。静态库的文件名形式是libname.a。共享 archive 的文件名形式是libname.sa。共享 archive 只是一 种过渡形式,帮助人们从静态库转变到动态库。)完成了链接之后,gcc 就可以生成可执行文件,如下所示。ganlocalhost gcc#gcc hello.o o hello 运行该可执行文件,出现正确的结果如下。rootlocalhost Gcc#./hello Hello World!三:这一节,我们来关注下gcc 的常用参数,有机会也好多加练习啦。首先来看看我们gcc 的版本吧,gcc-version 这个命令就会显示gcc 的版本号啦。好啦,下名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 14 页 -面开始下面开始讲解gcc 的常用参数啦o(_)o.参数详解 -c 只激活预处理,编译,和汇编,也就是他只把程序做成obj 文件例子用法:gcc-c hello.c 他将生成.o 的 obj 文件-S 只激活预处理和编译,就是指把文件编译成为汇编代码。例子用法gcc-S hello.c 他将生成.s 的汇编代码,你可以用文本编辑器察看-E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.例子用法:gcc-E hello.c pianoapan.txt gcc-E hello.c|more 慢慢看吧,一个 hello word 也要与处理成800 行的代码-o 制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,很难听,如果 你和我有同感,改掉它,哈哈例子用法gcc-o hello.exe hello.c(哦,windows 用习惯了)gcc-o hello.asm-S hello.c-ansi 关闭 gnu c 中与 ansi c 不兼容的特性,激活 ansi c 的专有特性(包括禁止一些 asm inline typeof 关键字,以及 UNIX,vax 等预处理宏,-Wall 显示警告信息-O0-O1-O2-O3 编译器的优化选项的4 个级别,-O0 表示没有优化,-O1 为缺省值,-O3 优化级别最高-g 只是编译器,在编译的时候,产生调试信息。-llibrary 制定编译的时候使用的库名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 14 页 -例子用法gcc-lcurses hello.c 使用 ncurses 库编译程序-Ldir 制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然编译器将只在标准库的目录找。这个dir 就是目录的名称。-gstabs 此选项以stabs 格式声称调试信息,但是不包括gdb 调试信息.-gstabs+此选项以stabs 格式声称调试信息,并且包含仅供gdb 使用的额外调试信息.-ggdb 此选项将尽可能的生成gdb 的可以使用的调试信息.-static 此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么动态连接库,就可以运行.-share 此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.-traditional 试图让编译器支持传统的C 语言特性-fno-asm 此选项实现ansi 选项的功能的一部分,它禁止将asm,inline 和 typeof 用作关键字。-fno-strict-prototype 只对 g+起作用,使用这个选项,g+将对不带参数的函数,都认为是没有显式的对参数的个数和类型说明,而不是没有参数.而 gcc 无论是否使用这个参数,都将对没有带参数的函数,认为城没有显式说明的类型-fthis-is-varialble 就是向传统c+看齐,可以使用 this 当一般变量使用.-fcond-mismatch 允许条件表达式的第二和第三参数类型不匹配,表达式的值将为void 类型-funsigned-char-fno-signed-char-fsigned-char-fno-unsigned-char 这四个参数是对char 类型进行设置,决定将 char 类型设置成unsigned char(前两个参数)或者signed char(后两个参数)名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 14 页 -include file 包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以用它设定,功能就相当于在代码中使用#include 例子用法:gcc hello.c-include/root/pianopan.h-imacros file 将 file 文件的宏,扩展到 gcc/g+的输入文件,宏定义本身并不出现在输入文件中-Dmacro 相当于 C 语言中的#define macro-Dmacro=defn 相当于 C 语言中的#define macro=defn-Umacro 相当于 C 语言中的#undef macro-undef 取消对任何非标准宏的定义-Idir 在你是用#includefile 的时候,gcc/g+会先在当前目录查找你所制定的头文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I 制定了目录,他回先在你所制定的目录查找,然后再按常规的顺序去找.对于#include,gcc/g+会到-I 制定的目录查找,查找不到,然后将到系统的缺省的头文件目录查找-I-就是取消前一个参数的功能,所以一般在-Idir 之后使用-idirafter dir 在-I 的目录里面查找失败,讲到这个目录里面查找.-iprefix prefix-iwithprefix dir 一般一起使用,当-I 的目录查找失败,会到 prefix+dir 下查找-nostdinc 使编译器不再系统缺省的头文件目录里面找头文件,一般和-I 联合使用,明确限定头文件的位置名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 14 页 -nostdin C+规定不在g+指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创建libg+库使用-C 在预处理的时候,不删除注释信息,一般和-E 使用,有时候分析程序,用这个很方便的-M 生成文件关联的信息。包含目标文件所依赖的所有源代码你可以用gcc-M hello.c 来测试一下,很简单。-MM 和上面的那个一样,但是它将忽略由#include 造成的依赖关系。-MD 和-M 相同,但是输出将导入到.d 的文件里面-MMD 和-MM 相同,但是输出将导入到.d 的文件里面-Wa,option 此选项传递option 给汇编程序;如果 option 中间有逗号,就将 option 分成多个选项,然后传递给会汇编程序-Wl.option 此选项传递option 给连接程序;如果 option 中间有逗号,就将 option 分成多个选项,然后传递给会连接程序.-x language filename 设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定 C 语言的后缀名称是.c 的,而 C+的后缀名是.C 或者.cpp,如果你很个性,决定你的C代码文件的后缀名是.pig 哈哈,那你就要用这个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数的使用。可以使用的参数吗有下面的这些c,objective-c,c-header,c+,cpp-output,assembler,and assembler-with-cpp.看到英文,应该可以理解的。例子用法:gcc-x c hello.pig-x none filename 关掉上一个选项,也就是让gcc 根据文件名后缀,自动识别文件类型例子用法:gcc-x c hello.pig-x none hello2.c-pipe 使用管道代替编译中临时文件,在使用非gnu 汇编工具的时候,可能有些问题gcc-pipe-o hello.exe hello.c-funsigned-char-fno-signed-char-fsigned-char-fno-unsigned-char 这四个参数是对char 类型进行设置,决定将 char 类型设置成unsigned char(前两个参数)或者signed char(后两个参数)GCC 的参数是很多的,这也只是部分。不过对于初学者来说,一时之间掌握这么多的参数也是有点困难的,不过一般推荐使用命令:gcc-Wall hello.c-o hello 就足够啦。一般要使用名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 14 页 -Wall 这个参数,他可以列出源程序在编译过程中出现的错误警告等信息,这是很有帮助的,注意:-Wall 这个参数是在编译过程中使用的,若先把源程序编译成目标文件,则在链接过程中不要使用这个参数。你还可以再加个-v 参数:列出比较详细的信息,(在标准错误)显示执行编译阶段的命令.同时显示编译器驱动程序,预处理器,编译器的版本号.这些在我们平时使用的过程中应该已经足够啦,若还想了解其他的一些参数,可以下载gcc的帮助文档有时间自己研究下。四:多文件编译、连接如果原文件分布于多个文件中:file1.c,file2,c$gcc-Wall file1.c file2.c-o name 若对其中一个文件作了修改,则可只重新编译该文件,再连接所有文件:$gcc-Wall-c file2.c$gcc file1.c file2.o-c name 注意:有些编译器对命令行中的.o 文件的出现顺序有限制:含有某函数定义的文件必须出现在含有调用该函数的文件之后。好在GCC 无此限制。编译预处理在程序中包含与连接库对应的头文件是很重要的方面,要使用库,就一定要能正确地引用头文件。一般在代码中通过#include 引入头文件,如果头文件位于系统默认的包含路径(/usr/includes),则只需在#include 中给出头文件的名字,不需指定完整路径.但若要包含的头文件位于系统默认包含路径之外,则有其它的工作要做:可以(在源文件中)同时指定头文件的全路径.但考虑到可移植性,最好通过-I 在调用 gcc 的编译命令中指定。下面看这个求立方的小程序(阴影语句表示刚开始不存在):#include int main(int argc,char*argv)double x=pow(2.0,3.0);printf(The cube of 2.0 is%fn,x);return 0;使用 gcc-2.95 来编译它(-lm 选项在后面的连接选项中有介绍,这里只讨论头文件的包含问题):$gcc-2.95-Wall pow.c-lm-o pow_2.95 pow.c:In function main:pow.c:5:warning:implicit declaration of function pow 程序编译成功,但gcc 给出警告:pow 函数隐式声明。$./pow_2.95 The cube of 2.0 is 1.000000 名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 14 页 -明显执行结果是错误的,在源程序中引入头文件(#include),消除了错误。关键:不要忽略Warning 信息!它可能预示着,程序虽然编译成功,但运行结果可能有错。故,起码加上-Wall 编译选项!并尽量修正Warning 警告。不过现在比较新的gcc在编译源程序没有引入头文件时,也会出现如下代码:test1.c:In function main:test1.c:4:warning:implicit declaration of function pow test1.c:4:warning:incompatible implicit declaration of built-in function pow 程序编译成功,执行结果也是正确的。因为现在比较新的编译器会自动的引入标准库中的头文件。搜索路径首先要理解#include 和#includefile.h 的区别:#include 只在默认的系统包含路径搜索头文件#includefile.h 首先在当前目录搜索头文件,若头文件不位于当前目录,则到系统默认的包含路径搜索头文件UNIX 类系统默认的系统路径为:头文件,包含路径:/usr/local/include/or/usr/include/库文件,连接路径:/usr/local/lib/or/usr/lib/对于标准 c 库(glibc 或其它 c 库)的头文件,我们可以直接在源文件中使用#include 来引入头文件.Gcc 的执行过程虽然我们称Gcc 是 C 语言的编译器,但使用gcc 由 C 语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和连接(Linking)。命令 gcc 首先调用 cpp 进行预处理,在预处理过程中,对源代码文件中的文件包含(include)、预编译语句(如宏定义define 等)进行分析。接着调用 cc1 进行编译,这个阶段根据输入文件生成以.o 为后缀的目标文件。汇编过程是针对汇编语言的步骤,调用as 进行工作,一般来讲,.S 为后缀的汇编语言源代码文件和汇编、.s 为后缀的汇编语言文件经过预编译和汇编之后都生成以.o 为后缀的目标文件。当所有的目标文件都生成之后,gcc 就调用 ld 来完成最后的关键性工作,这个阶段就是连接。在连接阶段,所有的目标文件被安排在可执行程序中的恰当的位置,同时,该程序所调用到的库函数也从各自所在的档案库中连到合适的地方。名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 14 页 -2、binutils 提供了一系列用来创建、管理和维护二进制目标文件的工具程序,如汇编(as)、连接(ld)、静态库归档(ar)、反汇编(objdump)、elf 结构分析工具(readelf)、无效调试信息和符号的工具(strip)等。通常,binutils 与 gcc 是紧密相集成的,没有binutils的话,gcc 是不能正常工作的。3、glibc 是 gnu 发布的 libc 库,也即 c 运行库。glibc 是 linux 系统中最底层的api(应用程序开发接口),几乎其它任何的运行库都会倚赖于glibc。glibc 除了封装linux 操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现,主要的如下:(1)string,字符串处理(2)signal,信号处理(3)dlfcn,管理共享库的动态加载(4)direct,文件目录操作(5)elf,共享库的动态加载器,也即interpreter(6)iconv,不同字符集的编码转换(7)inet,socket 接口的实现(8)intl,国际化,也即gettext的实现(9)io(10)linuxthreads(11)locale,本地化(12)login,虚拟终端设备的管理,及系统的安全访问(13)malloc,动态内存的分配与管理(14)nis(15)stdlib,其它基本功能glibc 和 libc 都是 Linux 下的 C 函数库,那么到底有什么区别呢?见到 Linux 下好多的库函数,曾经令我困惑,其实他们是有章可循的。名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 14 页 -libc 是 Linux 下的 ANSI C 的函数库;glibc 是 Linux 下的 GUN C 函数库;ANSI C 和 GNU C 有什么区别呢?ANSI C 是基本的 C 语言函数库,包含了C 语言最基本的库函数。这个库可以根据头文件划分为15 个部分,其中包括:字符类型()、错误码()、浮点常数()、数学常数()、标准定义()、标准I/O()、工具函数()、字符串操作()、时间和日期()、可变参数表()、信号()、非局部跳转()、本地信息()、程序断言()等等。这在其他的C 语言的 IDE 中都是有的。而 GNU C 函数库是一种类似于第三方插件的东西,由于Linux 是用语言写的,所以Linux 的一些操作是用语言实现的,所以组织开发了一个语言的库用于我们更好的利用 C 语言开发基于Linux 操作系统的程序。其实我们可以把它理解为类似于Qt 是一个 C+的第三方函数库一样。不过现在的不同的Linux 的发行版本对这两个函数库有不同的处理方法,有的可能已经集成在同一个库里了,例如我用的Ubuntu 就只有 glibc。名师资料总结-精品资料欢迎下载-名师精心整理-第 14 页,共 14 页 -

    注意事项

    本文(2022年gcc入门教程 .pdf)为本站会员(C****o)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开