gcc,gfortran和g++的和编译原理的简单介绍

tech2022-10-02  106

gcc,gfortran和g++的和编译原理的简单介绍

gcc,g++的介绍

GCC:最初的全名:GNU C Compiler.随着GCC支持的语言越来越多,它的名称就变成了GNU Compiler Collection。

gcc是GCC中的GUN C Compiler(C 编译器) g++是GCC中的GUN C++ Compiler(C++编译器) gfortran是GCC中的fortran编译器.

对于 .c和.cpp文件,gcc分别当做c和cpp文件编译(cpp的语法规则比c的更强一些)

对于 .c和.cpp文件,g++则统一当做cpp文件编译.

编译过程的介绍

参见:c语言编译过程详解,预处理,编译,汇编,链接(干货满满

预处理, 展开头文件/宏替换/去掉注释/条件编译 (test.i main .i)

编译, 检查语法,生成汇编 ( test.s main .s)

汇编, 汇编代码转换机器码 (test.o main.o)

链接 链接到一起生成可执行程序 a.out

作为用户一般只需要关心编译阶段和链接阶段,其中编译阶段检查语法,检查内存,检查指针.链接阶段是将库的内容添加到可执行文件中.

gcc命令行编译介绍

编译过程

参见gcc的使用简介与命令行参数说明

gcc -c 只编译,不链接成可执行文件,生成.o为后缀的目标文件 gcc -o 输出文件 源文件 生成可执行文件,如果输出文件名为指定,默认a.out gcc -g 产生符号调试工具 gcc -O(大写) 对程序进行优化编译链接 gcc -O2 更好的优化 gcc -E 预编译后停下来,生成后缀为 .i 的预编译文件。 gcc -S 汇编后停下来,生成后缀为 .s 的汇编源文件。

-Idirname:将 dirname 所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。

-Ldirname:将dirname所指出的目录加入到程序函数库文件的目录列表中,是在链接过程中使用的参数。在默认状态下,链接程序 ld 在系统默认路径中(如 /usr/lib)寻找所需要的库文件。这个选项告诉链接程序,首先到 -L 指定的目录中去寻找,然后到系统默认路径中寻找;如果函数库存放在多个目录下,就需要依次使用这个选项,给出相应的存放目录。

-lname:链接时装载名为 libname.a 的函数库。该函数库位于系统默认的目录或者由 -L 选项确定的目录下。例如,-lm 表示链接名为 libm.a 的数学函数库。

警告部分

-Wall 选项: 除了 -pedantic 之外,gcc 还有一些其他编译选项,也能够产生有用的警告信息。这些选项大多以 -W 开头。其中最有价值的当数 -Wall 了,使用它能够使 gcc 产生尽可能多的警告信息。

建议:gcc 给出的警告信息是很有价值的,它们不仅可以帮助程序员写出更加健壮的程序,而且还是跟踪和调试程序的有力工具。建议在用 gcc 编译源代码时始终带上 -Wall 选项,并把它逐渐培养成一种习惯,这对找出常见的隐式编程错误很有帮助。

-Werror 选项 在处理警告方面,另一个常用的编译选项是 -Werror。它要求 gcc 将所有的警告当成错误进行处理,这在使用自动编译工具(如 Make 等)时非常有用。如果编译时带上 -Werror 选项,那么 gcc 会在所有产生警告的地方停止编译,迫使程序员对自己的代码进行修改。只有当相应的警告信息消除时,才可能将编译过程继续朝前推进。

-v 输出 gcc 工作的详细过程

-static Linux下的库文件分为两大类,分别是:动态链接库(通常以 .so 结尾)和静态链接库(通常以 .a 结尾)。两者的差别仅在程序执行时所需的代码是在运行时动态加载的,还是在编译时静态加载的。默认情况下,gcc 在链接时优先使用动态链接库,只有当动态链接库不存在时才考虑使用静态链接库。如果需要的话,可以在编译时加上 -static 选项,强制使用静态链接库。

最新回复(0)