南通网站优化推广,唐山开发网站的公司,heroku wordpress,简单的html网页文章目录 GNU编译器示例编译 GNU编译器
GNU编译器#xff08;GNU Compiler#xff09;是由自由软件基金会#xff08;Free Software Foundation#xff0c;FSF#xff09;开发和维护的一套编译器集合。这些编译器主要用于编译各种编程语言的源代码#xff0c;将其转换为… 文章目录 GNU编译器示例编译 GNU编译器
GNU编译器GNU Compiler是由自由软件基金会Free Software FoundationFSF开发和维护的一套编译器集合。这些编译器主要用于编译各种编程语言的源代码将其转换为可执行文件或库。GNU编译器集合的其中一个最知名的成员是GCCGNU Compiler Collection。
GCC支持多种编程语言包括C、C、Fortran、Ada、Objective-C等。它在许多操作系统上都可用包括各种类UNIX系统、Linux、Windows等。GCC的设计目标之一是提供高度的可移植性使得开发者可以在不同的平台上使用相同的源代码进行编译。
除了GCC之外GNU编译器集合还包括其他工具例如GDBGNU Debugger用于调试程序GFORTRAN用于Fortran语言的编译器以及GNAT用于Ada语言的编译器等。
GNU编译器是自由软件遵循自由软件基金会的通用公共许可证GPL等自由软件许可协议。这意味着用户可以自由地查看、修改和分发这些编译器的源代码。
大多数编译系统提供编译器驱动程序(compiler driver)它代表用户在需要时调用语言预处理器、编译器、汇编器和链接器。
示例
sum.h
#ifndef __SUM__H_
#define __SUM__H_int sum(int *a,int n);#endifsum.c
#include sum.h
int sum(int *a,int n){int i,s0;for ( i 0; i n; i){s a[i];}return s;
}main.c
#include sum.h
int array[2] {1,2};
int main(int argc, char const *argv[])
{int val sum(array,2);return 0;
}
编译
在 shell 中输人下列命令来调用GCC 驱动程序:
linux gcc -Og -o prog main.c sum.c这个命令使用GCC编译器它的目标是将两个C语言源代码文件main.c和sum.c编译成一个可执行文件该文件的名称将被命名为“prog”。 解释每个部分 gcc: GNU Compiler Collection的命令用于调用GCC编译器。 -Og: 这是一个编译选项表示启用优化。具体而言这是“优化为调试”Optimize for Debugging的意思。它启用一些优化但保留了对调试的支持因此在开发时可以更轻松地进行调试。 -o prog: 这是一个指定输出文件名的选项。在这里“prog”是输出可执行文件的名称。 main.c sum.c: 这是要编译的源代码文件的名称用空格分隔。在这个例子中它们是“main.c”和“sum.c”。 这个命令将执行编译操作生成一个名为“prog”的可执行文件其中包含来“main.c”和“sum.c”的源代码。如果编译成功你可以通过运行./prog来执行生成的可执行文件。 下图概括了驱动程序在将示例程序从ASCII码源文件翻译成可执行目标文件时的行为。 如果想看看这些步骤用-v 选项来运行 GCC。驱动程序首先运行 C预处理器(cpp)它将 C的源程序 main.c翻译成一个ASCII码的中间文件 main.i
cpp [other arguments] main.c /tmp/main.i接下来驱动程序运行 C编译器(ccl)它将 main.i 翻译成一个ASCII 汇编语言文件 main.s:
cc1 /tmp/main.i -0g [other arguments] -o /tmp/main.s然后驱动程序运行汇编器(as)它将 main.s 翻译成一个可重定位目标文件(relo-catable object file)main.o:
as [otherarguments] -o /tmp/main.o /tmp/main.s驱动程序经过相同的过程生成 sum.o。 最后它运行链接器程序 ld将 main.o和sum.o以及一些必要的系统目标文件组合起来创建一个可执行目标文件(executable object file)prog:
ld -o prog [system object files and args] /tmp/main.o /tmp/sum.o要运行可执行文件 prog我们在 Linux shell 的命令行上输入它的名字
linux ./progshell 调用操作系统中一个叫做加载器(loader)的函数它将可执行文件 prog 中的代码和数据复制到内存然后将控制转移到这个程序的开头。