《第07章(gcc编译器)-linux学习课件.ppt》由会员分享,可在线阅读,更多相关《第07章(gcc编译器)-linux学习课件.ppt(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、使用编译器GNU cc开发应用程序 一、一、gcc的简介的简介 二、可执行文件的格式 三、三、gcc的使用的使用 gcc所遵循的部分文件约定规则所遵循的部分文件约定规则.c.c为后缀的文件,为后缀的文件,为后缀的文件,为后缀的文件,C C语言源代码文件;语言源代码文件;语言源代码文件;语言源代码文件;.a.a为后缀的文件,是由目标文件构成的档案库文件;为后缀的文件,是由目标文件构成的档案库文件;为后缀的文件,是由目标文件构成的档案库文件;为后缀的文件,是由目标文件构成的档案库文件;.C.C,.cc.cc或或或或.cxx.cxx 为后缀的文件,是为后缀的文件,是为后缀的文件,是为后缀的文件,是C
2、+C+源代码文件;源代码文件;源代码文件;源代码文件;.h.h为后缀的文件,是程序所包含的头文件;为后缀的文件,是程序所包含的头文件;为后缀的文件,是程序所包含的头文件;为后缀的文件,是程序所包含的头文件;.i.i 为后缀的文件,是已经预处理过的为后缀的文件,是已经预处理过的为后缀的文件,是已经预处理过的为后缀的文件,是已经预处理过的C C源代码文件;源代码文件;源代码文件;源代码文件;.ii.ii为后缀的文件,是已经预处理过的为后缀的文件,是已经预处理过的为后缀的文件,是已经预处理过的为后缀的文件,是已经预处理过的C+C+源代码文件;源代码文件;源代码文件;源代码文件;.m.m为后缀的文件,
3、是为后缀的文件,是为后缀的文件,是为后缀的文件,是Objective-CObjective-C源代码文件;源代码文件;源代码文件;源代码文件;.o.o为后缀的文件,是编译后的目标文件;为后缀的文件,是编译后的目标文件;为后缀的文件,是编译后的目标文件;为后缀的文件,是编译后的目标文件;.s.s为后缀的文件,是汇编语言源代码文件;为后缀的文件,是汇编语言源代码文件;为后缀的文件,是汇编语言源代码文件;为后缀的文件,是汇编语言源代码文件;.S.S为后缀的文件,是经过预编译的汇编语言源代码文件。为后缀的文件,是经过预编译的汇编语言源代码文件。为后缀的文件,是经过预编译的汇编语言源代码文件。为后缀的文
4、件,是经过预编译的汇编语言源代码文件。gcc的简介的简介 gcc gcc 是是是是 GNU GNU 的的的的 C C 和和和和 C+C+编译器。实际上,编译器。实际上,编译器。实际上,编译器。实际上,gcc gcc 能够编译能够编译能够编译能够编译多种多种语言:语言:语言:语言:C C、C+C+和和和和 Object C Object C等。利等。利等。利等。利用用用用 gcc gcc 命令可同时编译并连接命令可同时编译并连接命令可同时编译并连接命令可同时编译并连接 C C 和和和和 C+C+源程序。源程序。源程序。源程序。也可以对几个也可以对几个也可以对几个也可以对几个 C C 源文件利用源
5、文件利用源文件利用源文件利用 gcc gcc 编译、连接并生编译、连接并生编译、连接并生编译、连接并生成可执行文件。成可执行文件。成可执行文件。成可执行文件。gccgcc可以使程序员灵活地控制编译过程。编译过可以使程序员灵活地控制编译过程。编译过可以使程序员灵活地控制编译过程。编译过可以使程序员灵活地控制编译过程。编译过程一般可以分为下面四个阶段,每个阶段分别调程一般可以分为下面四个阶段,每个阶段分别调程一般可以分为下面四个阶段,每个阶段分别调程一般可以分为下面四个阶段,每个阶段分别调用不同的工具进行处理用不同的工具进行处理用不同的工具进行处理用不同的工具进行处理可执行文件Preprocess
6、ing Compilation Assembly Linking预处理链接编译组译源 程 序(*.c)预处理器编译器组译器连接器可执行文件格式 LinuxLinux系统中可执行文件有两种格式。系统中可执行文件有两种格式。系统中可执行文件有两种格式。系统中可执行文件有两种格式。第一种格式是第一种格式是第一种格式是第一种格式是a.outa.out格式,这种格式用于早期的格式,这种格式用于早期的格式,这种格式用于早期的格式,这种格式用于早期的LinuxLinux系统以及系统以及系统以及系统以及 Unix Unix系统的原始格式。系统的原始格式。系统的原始格式。系统的原始格式。a.outa.out来自
7、于来自于来自于来自于Unix CUnix C编译程序默认的可执行文件名。当使用共享库时,编译程序默认的可执行文件名。当使用共享库时,编译程序默认的可执行文件名。当使用共享库时,编译程序默认的可执行文件名。当使用共享库时,a.outa.out格式就会格式就会格式就会格式就会发生问题。把发生问题。把发生问题。把发生问题。把a.outa.out格式调整为共享库是一种非常复杂的操作。格式调整为共享库是一种非常复杂的操作。格式调整为共享库是一种非常复杂的操作。格式调整为共享库是一种非常复杂的操作。因此,一种新的文件格式被引入因此,一种新的文件格式被引入因此,一种新的文件格式被引入因此,一种新的文件格式被
8、引入UnixUnix系统系统系统系统5 5的第四版本和的第四版本和的第四版本和的第四版本和SolarisSolaris系统中。它被称为系统中。它被称为系统中。它被称为系统中。它被称为可执行和连接的格式(可执行和连接的格式(可执行和连接的格式(可执行和连接的格式(ELF:ELF:executive linked fileexecutive linked file )。这种格式很容易实现共享库。)。这种格式很容易实现共享库。)。这种格式很容易实现共享库。)。这种格式很容易实现共享库。ELFELF格式已经被格式已经被格式已经被格式已经被LinuxLinux系统作为标准的格式采用系统作为标准的格式采用
9、系统作为标准的格式采用系统作为标准的格式采用。gccgcc编译程序产生的所有的二进制文件都是编译程序产生的所有的二进制文件都是编译程序产生的所有的二进制文件都是编译程序产生的所有的二进制文件都是ELFELF格式的文件(即使可格式的文件(即使可格式的文件(即使可格式的文件(即使可执行文件的默认名仍然是执行文件的默认名仍然是执行文件的默认名仍然是执行文件的默认名仍然是a.outa.out)。较旧的。较旧的。较旧的。较旧的a.outa.out格式的程序仍然可以格式的程序仍然可以格式的程序仍然可以格式的程序仍然可以运行在支持运行在支持运行在支持运行在支持ELFELF格式的系统上。格式的系统上。格式的系
10、统上。格式的系统上。GNU C 的使用的使用基本语法基本语法基本语法基本语法 gcc options gcc options 说明:说明:说明:说明:在在在在gccgcc后面可以有多个编译选项,同时进行多个后面可以有多个编译选项,同时进行多个后面可以有多个编译选项,同时进行多个后面可以有多个编译选项,同时进行多个编译操作。很多的编译操作。很多的编译操作。很多的编译操作。很多的gccgcc选项包括一个以上的字符。选项包括一个以上的字符。选项包括一个以上的字符。选项包括一个以上的字符。因此你必须为每个选项指定各自的连字符。例因此你必须为每个选项指定各自的连字符。例因此你必须为每个选项指定各自的连字
11、符。例因此你必须为每个选项指定各自的连字符。例如,下面的两个命令是不同的:如,下面的两个命令是不同的:如,下面的两个命令是不同的:如,下面的两个命令是不同的:gcc-p-g test1.c gcc-p-g test1.c gcc -pg test1.c gcc -pg test1.c当你不用任何选项编译一个程序时,当你不用任何选项编译一个程序时,当你不用任何选项编译一个程序时,当你不用任何选项编译一个程序时,GCCGCC将会建将会建将会建将会建立立立立(假定编译成功假定编译成功假定编译成功假定编译成功)一个名为一个名为一个名为一个名为a.outa.out的可执行文件。的可执行文件。的可执行文件
12、。的可执行文件。gcc选项选项-o-o选项选项选项选项 你能用你能用你能用你能用-o -o 编译选项来为将产生的可执行文件指定一个编译选项来为将产生的可执行文件指定一个编译选项来为将产生的可执行文件指定一个编译选项来为将产生的可执行文件指定一个文件名来代替文件名来代替文件名来代替文件名来代替 a.out a.out。例:例:例:例:gcc o count count.cgcc o count count.c-c-c选项:告诉选项:告诉选项:告诉选项:告诉GCCGCC仅把源代码编译为目标代码而跳过汇仅把源代码编译为目标代码而跳过汇仅把源代码编译为目标代码而跳过汇仅把源代码编译为目标代码而跳过汇编
13、和连接的步骤。这个选项使用的非常频繁,因为它编和连接的步骤。这个选项使用的非常频繁,因为它编和连接的步骤。这个选项使用的非常频繁,因为它编和连接的步骤。这个选项使用的非常频繁,因为它使得编译多个使得编译多个使得编译多个使得编译多个C C程序时速度更快并且更易于管理。缺省程序时速度更快并且更易于管理。缺省程序时速度更快并且更易于管理。缺省程序时速度更快并且更易于管理。缺省时时时时GCCGCC建立的目标代码文件有一个建立的目标代码文件有一个建立的目标代码文件有一个建立的目标代码文件有一个.o.o的扩展名。的扩展名。的扩展名。的扩展名。例:例:例:例:gcc c test2.cgcc c test2
14、.c-E-E 只运行只运行只运行只运行 C C 预编译器。预编译器。预编译器。预编译器。-S-S 编译选项告诉编译选项告诉编译选项告诉编译选项告诉 gcc gcc 在为在为在为在为 C C 代码产生了汇编语言文件后代码产生了汇编语言文件后代码产生了汇编语言文件后代码产生了汇编语言文件后停止编译。停止编译。停止编译。停止编译。-shared-shared 生成共享目标文件。通常用在建立共享库时。生成共享目标文件。通常用在建立共享库时。生成共享目标文件。通常用在建立共享库时。生成共享目标文件。通常用在建立共享库时。-c-c 对源文件进行编译或汇编,但不链接对源文件进行编译或汇编,但不链接对源文件进
15、行编译或汇编,但不链接对源文件进行编译或汇编,但不链接警告选项在在gccgcc中用开关中用开关-Wall-Wall控制警告信息,使用示例命控制警告信息,使用示例命令如下:令如下:gcc Wall-o test3_1 test3_1.cgcc Wall-o test3_1 test3_1.c-w-w 不生成任何警告信息。不生成任何警告信息。多个源文件生成一个可执行文多个源文件生成一个可执行文件件 问题:有多个源文件时,如何生成一个可执行问题:有多个源文件时,如何生成一个可执行问题:有多个源文件时,如何生成一个可执行问题:有多个源文件时,如何生成一个可执行文件?文件?文件?文件?方法方法方法方法1
16、 1:gcc Wall o mytest test1.c test2.c gcc Wall o mytest test1.c test2.c test3.ctest3.c方法方法方法方法2 2:gcc-Wall-c test1.cgcc-Wall-c test1.cgcc-Wall c test2.cgcc-Wall c test2.cgcc-Wall c test3.c gcc-Wall c test3.c gcc o mytest test1.o test2.o test3.ogcc o mytest test1.o test2.o test3.o调试与优化选项调试与优化选项调试选项:调试
17、选项:调试选项:调试选项:-g-g:产生符号调试工具(:产生符号调试工具(:产生符号调试工具(:产生符号调试工具(GNU GNU 的的的的 Gdb Gdb)所必要的标准调)所必要的标准调)所必要的标准调)所必要的标准调试信息,要想对源代码进行调试,就必须加入这个选项。试信息,要想对源代码进行调试,就必须加入这个选项。试信息,要想对源代码进行调试,就必须加入这个选项。试信息,要想对源代码进行调试,就必须加入这个选项。优化选项:优化选项:优化选项:优化选项:-O0-O0 不进行优化处理。不进行优化处理。不进行优化处理。不进行优化处理。-O-O选项:告诉选项:告诉选项:告诉选项:告诉GCCGCC对源
18、代码进行基本优化。这些优化在对源代码进行基本优化。这些优化在对源代码进行基本优化。这些优化在对源代码进行基本优化。这些优化在大多数情况下都会使程序执行的更快。大多数情况下都会使程序执行的更快。大多数情况下都会使程序执行的更快。大多数情况下都会使程序执行的更快。-O2-O2选项:告诉选项:告诉选项:告诉选项:告诉GCC GCC 产生尽可能小和尽可能快的代码。产生尽可能小和尽可能快的代码。产生尽可能小和尽可能快的代码。产生尽可能小和尽可能快的代码。-O2O2选项将使编译的速度比使用选项将使编译的速度比使用选项将使编译的速度比使用选项将使编译的速度比使用-O-O时慢。但通常产生的代时慢。但通常产生的代时慢。但通常产生的代时慢。但通常产生的代码执行速度会更快。码执行速度会更快。码执行速度会更快。码执行速度会更快。-O3-O3选项:比选项:比选项:比选项:比-O2 -O2 更进一步优化,包括更进一步优化,包括更进一步优化,包括更进一步优化,包括 inline inline 函数。函数。函数。函数。