安藏理工大坚 ANHUI UNIVERSITY OF SCIENCE TECHNOLOGY 2.1GNUC/C++编译器的使用 gcc编译器选项和参数 参数 含义 -o <file> Place the output into <file> -c Compile and assemble,but do not link -ggdb Produce debugging information for use by GDB. -0 the compiler tries to reduce code size and execution time, without performing any optimizations that take a great deal of com-pilation time. -9 Produce debugging information in the operating system's native format.GDB can work with this debugging information. -I<dir> Add the directory dir to the list of directories to be searched for header files.Directories named by-I are searched before the -L<dir> Search the library named library when linking 8
8 2.1 GNU C/C++编译器的使用 gcc 编译器选项和参数 参数 含义 -o <file> Place the output into <file> -c Compile and assemble, but do not link -ggdb Produce debugging information for use by GDB. -O the compiler tries to reduce code size and execution time, without performing any optimizations that take a great deal of com-pilation time. -g Produce debugging information in the operating system's native format. GDB can work with this debugging information. -I <dir> Add the directory dir to the list of directories to be searched for header files. Directories named by -I are searched before the -L <dir> Search the library named library when linking
安藏理工大學 ANHUI UNIVERSITY OF SCIENCE TECHNOLOGY 2.1GNUC/C++编译器的使用 1、直接通过编译生成目标代码可执行文件: $gcc hello.c -o hello 2、如果一个程序包含有多个源文件,则也可直接生成目标代码: void f1() f printf“y%sln”,"function1")月 } void f2() { printf("%sIn","function 2"); main() { 10; 20时 } $gcc f1.c f2.c main.c -o main 9
9 2.1 GNU C/C++编译器的使用 1、直接通过编译生成目标代码可执行文件: $gcc hello.c –o hello 2、如果一个程序包含有多个源文件,则也可直接生成目标代码: void f1() { printf(“%s\n”, "function 1"); } void f2() { printf("%s\n", "function 2"); } main() { f1(); f2(); } $gcc f1.c f2.c main.c –o main
安藏理工大学 ANHUI UNIVERSITY OF SCIENCE TECHNOLOGY > Linux.上广泛使用的C语言编译器是GNUC编译器,GNU C建立在自由软件基金会的编程许可证的基础上,可以自 由发布。在Liux下,一个完整的C语言开发环境到少包 括以下三个组成部分 √函数库glibc(在/usr/八ib和/ib目录中) √ 编译器gcc √ 系统头文件glibc_header(*.h) >gbc是构成一个完整的C语言开发环境所必不可少的组成 部分,也是Linux下C语言的主要函数库。 > glibc headerr中包含了系统编译源代码所需要的声明文 件,如果缺少系统头文件,很多用到系统功能的C程序将无 法编译。(包含在/usr/include/及其子目录中) 10
10 ➢ Linux上广泛使用的C语言编译器是GNU C编译器,GNU C建立在自由软件基金会的编程许可证的基础上,可以自 由发布。在Linux下,一个完整的C语言开发环境到少包 括以下三个组成部分: ✓函数库glibc (在/usr/lib和/lib目录中) ✓编译器gcc ✓系统头文件glibc_header (*.h) ➢ glibc是构成一个完整的C语言开发环境所必不可少的组成 部分,也是Linux下C语言的主要函数库。 ➢ glibc_header中包含了系统编译源代码所需要的声明文 件,如果缺少系统头文件,很多用到系统功能的C程序将无 法编译。(包含在/usr/include/及其子目录中)
安藏理工大学 ANHUI UNIVERSTTY OF SCIENCE TECHNOLOGY 2.2 GNUC/C+函数库 定义:是一些预先编译好的函数的集合,那些函数都是按照可再使用 的原则编写的。它们通常是一组相互关联的用来完成某项常见工作的 函数构成(比如c库里面的标准输入输出函数、时间函数和数学函数 等)。 >函数库中的函数可以通过连接程序与应用程序进行连接,而不必在每 次开发程序时都对这些通用的函数进行编译。 不同类型的应用程序将会使用不同的函数库。如数学应用将使用数学 库libm(/usr/ib/Iibm.a,/usr/Iib/ibm.so),标准的C库 libc(/usr/lib/libc.a,/usr/lib/libc.so). 注意:*.h只是对函数的声明(declaration),函数的定义是在具体的函 数库中 11
11 2.2 GNU C/C++函数库 ➢ 定义:是一些预先编译好的函数的集合,那些函数都是按照可再使用 的原则编写的。它们通常是一组相互关联的用来完成某项常见工作的 函数构成(比如c库里面的标准输入输出函数、时间函数和数学函数 等)。 ➢ 函数库中的函数可以通过连接程序与应用程序进行连接,而不必在每 次开发程序时都对这些通用的函数进行编译。 ➢ 不同类型的应用程序将会使用不同的函数库。如数学应用将使用数学 库libm(/usr/lib/libm.a, /usr/lib/libm.so),标准的C库 libc(/usr/lib/libc.a,/usr/lib/libc.so)。 注意:*.h只是对函数的声明(declaration),函数的定义是在具体的函 数库中
安藏理工大学 ANHUI UNIVERSITY OF SCIENCE TECHNOLOGY > 所有的程序都将使用标准的C函数库bc,该库中包含了内存管理或 输入输出操作的基本函数,这些库都存放在/usr/b或/ib这些系统 公用的目录中,系统中的任何用户都可以利用这些库。 注:用户可以自己定义自己的函数库! 库可以有三种使用的形式: 静态库(*.):代码在编译时就已连接到开发人员开发的应用程序 中。静态库在程序编译时会被连接到目标代码中,程序运行时将 不再需要该静态库 1 共享库(shared object,以*.so作为后缀):只是在程序开始运行 时才载入,在编译时,只是简单地指定需要使用的库函数。 动态库:是共享库的另一种变化形式,也是在程序运行时载入 使用的库函数不是在程序运行开始,而是在程序中的语句需要使 用该函数时才载入。类似于windows OS中的DLL文件。 12
12 ➢ 所有的程序都将使用标准的C函数库libc,该库中包含了内存管理或 输入输出操作的基本函数,这些库都存放在/usr/lib或/lib这些系统 公用的目录中,系统中的任何用户都可以利用这些库。 注:用户可以自己定义自己的函数库! ➢ 库可以有三种使用的形式: ✓ 静态库(*.a):代码在编译时就已连接到开发人员开发的应用程序 中。静态库在程序编译时会被连接到目标代码中,程序运行时将 不再需要该静态库 ✓ 共享库(shared object,以*.so作为后缀):只是在程序开始运行 时才载入,在编译时,只是简单地指定需要使用的库函数。 ✓ 动态库:是共享库的另一种变化形式,也是在程序运行时载入, 使用的库函数不是在程序运行开始,而是在程序中的语句需要使 用该函数时才载入。类似于windows OS中的DLL文件