gcc编译器使用简明指南

合集下载

gcc编译器使用简明指南

gcc编译器使用简明指南

gcc编译器使用简明指南gcc编译器使用简明指南1、简介1.1 编译器概述GCC(GNU Compiler Collection)是一个开源的编译器套件,支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada等。

它是一个强大的编译器,被广泛用于开发各种类型的应用程序。

1.2 安装GCC可以在多个平台上进行安装,如Linux、Mac OS和Windows 等。

安装方法因平台而异,可参考相应的文档进行安装。

2、基本用法2.1 编译单个文件GCC的基本语法是:```gcc [选项] [文件名]```选项可以有很多,常用的包括:- `-o`:指定输出文件名- `-Wall`:显示警告信息- `-g`:调试信息- `-O`:优化级别示例:```gcc -o hello hello:c```以上命令将编译`hello:c`文件,并输出可执行文件`hello`。

2.2 编译多个文件如果项目中涉及多个源文件,可以使用以下方式进行编译:```gcc [选项] [文件1] [文件2] :::```示例:```gcc -o hello hello:c utils:c```以上命令将编译`hello:c`和`utils:c`,并输出可执行文件`hello`。

3、高级用法3.1 静态库和动态库GCC支持静态库和动态库,可以使用以下命令进行编译:```gcc [选项] [文件1] [文件2] ::: -o [输出文件] -L [库路径] -l [库名]```选项说明:- `-L`:指定库搜索路径- `-l`:指定要的库示例:```gcc -o hello hello:c -L /usr/lib -l ncurses```以上命令将编译`hello:c`并`ncurses`库,可执行文件`hello`。

4、调试选项GCC支持多种调试选项,可通过以下命令进行编译:```gcc [选项] [文件名] -g```选项说明:- `-g`:调试信息示例:```gcc -o hello hello:c -g```以上命令将编译`hello:c`并可执行文件`hello`,同时调试信息。

1、GCC编译器的使用

1、GCC编译器的使用

linux下gcc编译器的使用1、文件后缀名.c C 源程序.C C++ 源程序.cc C++ 源程序.cxx C++ 源程序.m Objective –C源程序.i 预处理过的c源程序.ii 预处理过的C++源程序.s 组合语言源程序.S 组合语言源程序.h 头文件.o 目标文件.a 存档文件2、GCC常用选项-c 通知GCC取消链接步骤,即编译源码并在最后生成目标文件;-Dmacro定义指定的宏,使它能够通过源码中的#ifdef进行检验 #define-static 指定程序编译时采用静态编译的方法;-E 不经过编译预处理程序的输出而输送至标准输出;-g获得有关调试程序的详细信息,它不能与-o选项联合使用;-Idirectory在包含文件搜索路径的起点处添加指定目录;-llibrary提示链接程序在创建最终可执行文件时包含指定的库;-O、-O2、-O3将优化状态打开,该选项不能与-g选项联合使用;-S要求编译程序生成来自源代码的汇编程序输出;-v启动所有警报;-Wall发生警报时取消编译操作,即将警报看作是错误;-Werror在发生警报时取消编译操作,即把报警当作是错误;-w 禁止所有的报警。

目前Linux下最常用的C语言编译器是GCC(GNU Compiler Collection),它是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++和Object C等语言编写的程序。

GCC不仅功能非常强大,结构也异常灵活。

最值得称道的一点就是它可以通过不同的前端模块来支持各种语言,如Java、 Fortran、Pascal、Modula-3和Ada等。

开放、自由和灵活是Linux的魅力所在,而这一点在GCC上的体现就是程序员通过它能够更好地控制整个编译过程。

在使用GCC编译程序时,编译过程可以被细分为四个阶段:◆ 预处理(Pre-Processing)◆ 编译(Compiling)◆ 汇编(Assembling)◆ 链接(Linking)GCC起步在学习使用GCC之前,下面的这个例子能够帮助用户迅速理解GCC的工作原理,并将其立即运用到实际的项目开发中去。

gcc的使用方法

gcc的使用方法

gcc的使用方法GCC(GNU Compiler Collection)是一款由GNU开发的编程语言编译器集合,支持多种编程语言,如C、C++、Fortran等。

它被广泛用于各种操作系统和硬件平台上的软件开发,提供了强大的功能和灵活的配置选项。

本文将介绍GCC的基本使用方法,帮助读者快速上手。

一、安装GCC要使用GCC,首先需要在您的计算机上安装它。

GCC可以在多个操作系统上运行,包括Linux、Windows和Mac OS。

具体的安装方法因操作系统而异,下面将分别介绍。

1. 在Linux上安装GCC:在大多数Linux发行版中,GCC已经默认安装。

如果您的系统中没有安装GCC,您可以通过包管理器来安装它。

例如,在Debian或Ubuntu系统上,可以使用以下命令安装GCC:```sudo apt-get install gcc```其他Linux发行版的安装方法请参考相应的文档。

2. 在Windows上安装GCC:在Windows上,可以通过MinGW或MSYS2来安装GCC。

这两个工具集提供了一种在Windows环境中使用GCC的方式。

您可以从官方网站上下载并按照安装向导进行安装。

3. 在Mac OS上安装GCC:在Mac OS上,可以使用Homebrew或MacPorts来安装GCC。

这两个软件包管理系统可以让您以与Linux相似的方式在Mac OS上安装软件。

例如,使用Homebrew安装GCC的命令如下:```brew install gcc```其他安装方法请参考相应文档。

二、编写源代码安装好GCC后,我们就可以开始编写源代码了。

GCC支持多种编程语言,但本文以C语言为例进行介绍。

打开任何文本编辑器,创建一个后缀名为.c的文件,并编写您的C 源代码。

例如,创建一个名为`hello.c`的文件,其中包含以下代码:```c#include <stdio.h>int main() {printf("Hello, world!\n");return 0;}```三、编译和运行代码一旦您编写好了源代码,接下来就可以使用GCC将其编译成可执行文件。

gcc 用法

gcc 用法

gcc 用法GCC (GNU Compiler Collection) 是一套自由软件编译器,可以用于编译多种编程语言的源代码,包括 C、C++、Objective-C、Fortran、Ada 和其他一些语言。

GCC 是GNU计划的一部分,由自由软件基金会维护和发展。

本文将详细介绍 GCC 的使用方法。

一、环境准备在使用GCC之前,需要先安装好GCC。

GCC是开源软件,常见的Linux发行版都默认安装GCC,Windows下可以通过安装Cygwin或MinGW等方式安装GCC。

安装完成后,在命令行中输入gcc --version查看gcc的版本号确认是否安装成功。

除了GCC之外,还需要一个文本编辑器来编写源代码。

Windows下常用的文本编辑器有Notepad++,Linux下则使用vim或emacs等编辑器。

还需要了解一些基本的编程知识和语法。

二、GCC 编译 C 语言程序以下是一个简单的 C 语言程序,可以输出 "Hello, world!":```c#include <stdio.h>printf("Hello, world!\n");return 0;}```将上述代码保存为 helloworld.c 文件,然后在命令行中进入文件所在目录,输入以下命令编译该程序:```gcc helloworld.c -o helloworld```gcc是编译器的命令,helloworld.c是待编译的源代码文件名,-o helloworld是生成的可执行文件名。

执行上述命令后,GCC 会把源代码编译成可执行文件 helloworld。

运行该可执行文件,可以得到以下输出:```Hello, world!```三、GCC 编译 C++ 程序GCC 也可以编译 C++ 程序,以下是一个简单的 C++ 程序,可以输出 "Hello,world!":```c++#include <iostream>std::cout << "Hello, world!" << std::endl;return 0;}```将上述代码保存为 helloworld.cpp 文件,然后在命令行中进入文件所在目录,输入以下命令编译该程序:```g++ helloworld.cpp -o helloworld```g++是编译器的命令,helloworld.cpp是待编译的源代码文件名,-o helloworld是生成的可执行文件名。

GCC使用指南

GCC使用指南
-idirafter dir -include file -imacros file -iprefix
file -iwithprefix dir -M -MD -MM -MMD -nostdinc -P
-Umacro -undef
为扩展名的 object file 以及扩展名为 .a 的 archive file)都会
交由连结程序来处理(在指令行将那些文件当作连结程序的参数传给
连结程序)。
选项:
不同的选项必须分开来下:例如 `-dr' 这个选项就与 `-d -r' 大
.a Archive file
除非编译过程出现错误,否则 "连结" 一定是产生一个新程序的最
後阶段。然而你也可以以 -c、-s 或 -E 等选项,将整个过程自四
个阶段中的其中一个停止。在连结阶段,所有与原始码相对应的
.o 文件、程序库、和其他无法自文件名辨明属性的文件(包括不以 .o
-gxcoff -gxcoff+ -gdwarf -gdwarf+ -gstabs -gstabs+
-ggdb -p -pg -save-temps -print-file-name=library
-print-libgcc-file-name -print-prog-name=program
-fdollars-in-identifiers -fenum-int-equiv
-fexternal-templates -fno-asm -fno-builtin
-fno-strict-prototype -fsigned-bitfields
-msupersparc -mcypress

C语言编译器gcc命令如何操作步骤

C语言编译器gcc命令如何操作步骤

C语言编译器gcc命令如何操作步骤C语言是一种高级编程语言,由于其结构化编程,声明式语法,高效性和可靠性,被广泛用于很多领域。

gcc是一种C语言编译器,是Unix系统中最常用的编译器之一,它可以编译C、C++、JAVA等语言。

本文将为读者介绍对于gcc编译器的基本概念、相关命令以及实践操作步骤。

一、gcc基本概念1. 什么是编译器?先来了解一下编译器的作用。

编译器是将高级语言编写的程序转换成计算机可执行的机器语言的软件程序。

程序员可以使用高级语言编写程序,编译器将高级语言转换成计算机能够理解的机器语言。

2. 什么是gcc?GCC是GNU编译器集合(GNU Compiler Collection)的缩写。

它是一个重要的语言编译器,可以编译C、C++、JAVA等语言的程序。

gcc包含了一系列的编译器,每一个编译器都可以编译不同的语言,它不仅是Linux系统中的常用编译器,也被广泛使用于其他操作系统中。

3. gcc优点- 开源软件:可以透明、高效地利用计算机系统资源,让整个编译过程更灵活。

- 软件体积小:由于每次都是重新编译,因此gcc生成的二进制文件体积很小。

- 可移植性:gcc可以在不同的操作系统上进行编译。

同一份源代码,在不同的系统上编译,可以得到相同的结果。

- 动态链接库:gcc支持动态链接库,可以减少程序的代码冗余问题。

二、gcc常用命令以下是gcc编译器的常用命令:1. gcc -ogcc命令使用" -o"选项可以把源文件编译成可执行文件,例如:```$ gcc -o hello hello.c```上述命令的含义是将hello.c文件编译成hello可执行文件。

2. gcc -cgcc命令使用" -c"选项将源文件编译成目标文件。

目标文件是不可执行的文件,它包含了已经编译过的程序的一部分,这些程序可以用作最终的可执行文件中的一部分。

例如:```$ gcc -c hello.c```上述命令的含义是将hello.c文件编译成目标文件hello.o。

gcc使用方法

gcc使用方法

1。

gcc包含的c/c++编译器gcc,cc,c++,g++,gcc和cc是一样的,c++和g++是一样的,(没有看太明白前面这半句是什么意思:))一般c程序就用gcc编译,c++程序就用g++编译2。

gcc的基本用法gcc test.c这样将编译出一个名为a.out的程序gcc test.c -o test这样将编译出一个名为test的程序,-o参数用来指定生成程序的名字3。

为什么会出现undefined reference to 'xxxxx'错误?首先这是链接错误,不是编译错误,也就是说如果只有这个错误,说明你的程序源码本身没有问题,是你用编译器编译时参数用得不对,你没有指定链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译参数里指定程序要链接数学库,方法是在编译命令行里加入-lm。

4。

-l参数和-L参数-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了。

好了现在我们知道怎么得到库名了,比如我们自已要用到一个第三方提供的库名字叫libtest.so,那么我们只要把libtest.so拷贝到/usr/lib 里,编译时加上-ltest参数,我们就能用上libtest.so库了(当然要用libtest.so库里的函数,我们还需要与libtest.so配套的头文件)。

放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了,但如果库文件没放在这三个目录里,而是放在其他目录里,这时我们只用-l参数的话,链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find -lxxx”,也就是链接程序ld在那3个目录里找不到libxxx.so,这时另外一个参数-L就派上用场了,比如常用的X11的库,它放在/usr/X11R6/lib目录下,我们编译时就要用-L/usr/X11R6/lib –lX11参数,-L参数跟着的是库文件所在的目录名。

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

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

gcc的使用简介与命令行参数说明参考:《GNU gcc嵌入式系统开发作者:董文军》(一) gcc的基本用法(二) 警告提示功能选项(三) 库操作选项(四) 调试选项(五) 交叉编译选项(一) gcc的基本用法使用gcc编译器时,必须给出一系列必要的调用参数和文件名称。

不同参数的先后顺序对执行结果没有影响,只有在使用同类参数时的先后顺序才需要考虑。

如果使用了多个-L 的参数来定义库目录,gcc会根据多个-L 参数的先后顺序来执行相应的库目录。

因为很多gcc参数都由多个字母组成,所以gcc参数不支持单字母的组合,Linux中常被叫短参数(short options),如-dr 与-d -r 的含义不一样。

gcc编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。

gcc最基本的用法是:gcc [options] [filenames]其中,options就是编译器所需要的参数,filenames给出相关的文件名称,最常用的有以下参数:-c只编译,不链接成为可执行文件。

编译器只是由输入的 .c 等源代码文件生成 .o 为后缀的目标文件,通常用于编译不包含主程序的子程序文件。

-o output_filename确定输出文件的名称为output_filename。

同时这个名称不能和源文件同名。

如果不给出这个选项,gcc就给出默认的可执行文件a.out 。

-g产生符号调试工具(GNU的gdb)所必要的符号信息。

想要对源代码进行调试,就必须加入这个选项。

-O对程序进行优化编译、链接。

采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是编译、链接的速度就相应地要慢一些,而且对执行文件的调试会产生一定的影响,造成一些执行效果与对应源文件代码不一致等一些令人“困惑”的情况。

因此,一般在编译输出软件发行版时使用此选项。

gcc的使用

gcc的使用

GCC使用手册作者:Clock1.前言GCC编译器的手册(GCC MANUAL)的英文版已经非常全面,并且结构也非常完善了,只是一直都没有中文的版本,我这次阅读了GCC编译器的主要内容,对手册的内容进行了结构性的了解,认为有必要对这次阅读的内容进行整理,为以后的工作做准备。

由于我对这个英文手册的阅读也仅仅是结构性的。

因此有很多地方并没有看,所以这篇文档的内容我也只能写出部分,对于以后需要详细了解的地方,会再往这篇文档中增添内容,需要增添的内容主要是编译器的各种开关。

2. GCC功能介绍GCC编译器完成从C、C++、objective-C等源文件向运行在特定CPU硬件上的目标代码的转换(这是任何一个编译器需要完成的任务)。

GCC能够处理的源文件分为C、C++、Objective-C、汇编语言等。

对于这些源文件,用他们的后缀名进行标示。

GCC能够处理的后缀有:a. *.c *.C (C语言)b. *.cxx *.cc (C++语言)c. *.m (面向对象的C)d. *.i (预处理后的C语言源文件)e. *.ii (预处理后的C++语言源文件)f. *.s *.S (汇编语言)h. *.h (头文件)目标文件可以是:a. *.o 编译连接后的目标文件b. *.a 库文件编译器把编译生成目标代码的任务分为以下4步:a.预处理,把预处理命令扫描处理完毕;b.编译,把预处理后的结果编译成汇编或者目标模块;c.汇编,把编译出来的结果汇编成具体CPU上的目标代码模块;d.连接,把多个目标代码模块连接生成一个大的目标模块;3. GCC开关GCC的运行开关共分为11类,这是类开关从11个方面控制着GCC程序的运行,以达到特定的编译目的。

3.1. 全局开关(OVERALL OPTIONS)全局开关用来控制在“GCC功能介绍”中的GCC的4个步骤的运行,在缺省的情况下,这4个步骤都是要执行的,但是当给定一些全局开关后,这些步骤就会在某一步停止执行,这产生中间结果,例如可能你只是需要中间生成的预处理的结果或者是汇编文件(比如拟的目的是为了看某个CPU上的汇编语言怎么写)。

Linuxgcc编译器使用方法

Linuxgcc编译器使用方法

Linuxgcc编译器使用方法LINUX gcc编译器使用方法本文介绍了在LINUX下进行C语言编程所需的基本知识。

在本文中,我们将学习以下内容:源代码编译编译文件编译库链接程序调试头文件和系统帮助|源代码编译是在Linux下进行的。

如果你想编译一个c语言源程序,我们将使用GNU的gcc编译器。

让我们举一个例子来说明如何使用gcc编译器。

假设我们有以下非常简单的源程序(你好。

INTMAIN(INTARGGC,CHAR * * ARGV){PRINTF(Hello Linux);要编译这个程序,我们只需要在命令行执行。

cgcc编译器将为我们生成一个hello可执行文件。

执行。

/你好可以看到程序的输出。

在命令行中,gcc表示我们使用gcc来编译我们的源程序。

o选项表示我们需要编译器输出给我们的可执行文件叫做hello,hello.c是我们的源程序文件。

gcc编译器有许多选项。

一般来说,我们只需要知道其中的一些。

-o 选项我们已经知道,这意味着我们需要输出可执行文件的名称。

-c 选项意味着我们只需要编译器输出目标代码。

但是,没有必要输出可执行文件。

-g选项意味着我们需要编译器在以后编译时为我们提供调试程序的信息。

如果知道这三个选项,我们可以编译自己编写的简单源程序。

如果您想了解更多选项,可以查看gcc帮助文档。

有许多其他选项的详细描述。

2。

makefile的编写假设我们有这样一个程序。

源代码如下:/* main . c */# include mytol 1 . h # include mytol 2 . h intmain(intargc,char * * argv){mytol 1 _ print(hello);mytool2_print(您好);}/* my tool 1 . H */# if ndef _ MYTOL _ 1 _ H# define _ MYTOL _ 1 _ Hvoid my tool 1 _ print(char * print _ str);# endif/* my tool 1 . c */# include my tool 1 . h void my tool 1 _ print(char * print _ str){printf(这是mytool1 print,print _ str);}/* my tool 2 . H */# if ndef _ MYTOL _ 2 _ H # define _ MYTOL _ 2 _ Hvoid my tool 2 _ print(char * print _ str);# endif/* my tool 2 . c */# include my tool 2 . h void my tool 2 _ print(char * print _ str){printf(这是mytool2 print,print _ str);当然,因为这个程序很短,所以我们可以编译gcc-c main . cgcc-c my tool 1 . cgcc-c my tool 2 . cgcc-o main . o my tool 1 . o my tool 2 . o。

GCC使用指导

GCC使用指导

虽然有些老了(如无gcc 4.4.x/4.5.x的 -O4),不过总体而言还是有些用的。

原帖:/info/article/articleInfo.php?aId=2611621.前言GCC编译器的手册(GCC MANUAL)的英文版已非常全方面,并且结构也非常完善了,只是一直都没有中文的版本,我这次阅读了GCC编译器的主要内容,对手册的内容进行了结构性的了解,认为有必要对这次阅读的内容进行整理,为以后的工作做准备。

由于我对这个英文手册的阅读也仅仅是结构性的。

因此有非常多地方并没有看,所以这篇文件的内容我也只能写出部分,对于以后需要周详了解的地方,会再往这篇文件中增添内容,需要增添的内容主要是编译器的各种开关。

2. GCC功能介绍GCC编译器完成从C、C++、objective-C等源文件向运行在特定CPU硬件上的目标代码的转换(这是所有一个编译器需要完成的任务)。

GCC能够处理的源文件分为C、C++、Objective-C、汇编语言等。

对于这些源文件,用他们的后缀名进行标示。

GCC能够处理的后缀有:a. *.c *.C (C语言)b. *.cxx *.cc (C++语言)c. *.m (面向对象的C)d. *.i (预处理后的C语言源文件)e. *.ii (预处理后的C++语言源文件)f. *.s *.S (汇编语言)h. *.h (头文件)目标文件能是:a. *.o 编译连接后的目标文件b. *.a 库文件编译器把编译生成目标代码的任务分为以下4步:a.预处理,把预处理命令扫描处理完毕;b.编译,把预处理后的结果编译成汇编或目标模块;c.汇编,把编译出来的结果汇编成具体CPU上的目标代码模块;d.连接,把多个目标代码模块连接生成一个大的目标模块;3. GCC开关GCC的运行开关共分为11类,这是类开关从11个方面控制着GCC程式的运行,以达到特定的编译目的。

3.1. 全局开关(OVERALL OPTIONS)全局开关用来控制在“GCC功能介绍”中的GCC的4个步骤的运行,在缺省的情况下,这4个步骤都是要执行的,不过当给定一些全局开关后,这些步骤就会在某一步停止执行,这产生中间结果,例如可能你只是需要中间生成的预处理的结果或是汇编文件(比如拟的目的是为了看某个CPU上的汇编语言怎么写)。

GCC使用入门与安装方法

GCC使用入门与安装方法

Linux编程起步 GCC基本用法初学时最好从命令行入手,这样可以熟悉从编写程序、编译、调试和执行的整个过程。

编写程序可以用vi或其它编辑器编写。

编译则使用GCC命令。

要往下学习首先就得熟悉GCC命令的用法。

GCC命令提供了非常多的命令选项,但并不是所有都要熟悉,初学时掌握几个常用的就可以了,到后面再慢慢学习其它选项,免得因选项太多而打击了学习的信心。

一. 常用编译命令选项假设源程序文件名为test.c。

1. 无选项编译链接用法:#gcc test.c作用:将test.c预处理、汇编、编译并链接形成可执行文件。

这里未指定输出文件,默认输出为a.out。

2. 选项 -o用法:#gcc test.c -o test作用:将test.c预处理、汇编、编译并链接形成可执行文件test。

-o选项用来指定输出文件的文件名。

3. 选项 -E用法:#gcc -E test.c -o test.i作用:将test.c预处理输出test.i文件。

4. 选项 -S用法:#gcc -S test.i作用:将预处理输出文件test.i汇编成test.s文件。

5. 选项 -c用法:#gcc -c test.s作用:将汇编输出文件test.s编译输出test.o文件。

6. 无选项链接用法:#gcc test.o -o test作用:将编译输出文件test.o链接成最终可执行文件test。

7. 选项-O用法:#gcc -O1 test.c -o test作用:使用编译优化级别1编译程序。

级别为1~3,级别越大优化效果越好,但编译时间越长。

二. 多源文件的编译方法如果有多个源文件,基本上有两种编译方法:[假设有两个源文件为test.c和testfun.c]1. 多个文件一起编译用法:#gcc testfun.c test.c -o test作用:将testfun.c和test.c分别编译后链接成test可执行文件。

2. 分别编译各个源文件,之后对编译后输出的目标文件链接。

gcc编译c文件并运行的方法

gcc编译c文件并运行的方法

gcc编译c文件并运行的方法GCC是一款广泛使用的编译器,可用于编译多种编程语言,包括C语言。

它是一个开源软件,可以在多种平台上使用,如Linux、Windows和Mac OS等。

GCC编译器可以将C语言程序源代码编译为计算机可以执行的机器代码,这些机器代码可以在计算机上直接运行。

本文将介绍如何使用GCC编译C语言程序,并在计算机上运行它们。

步骤1:安装GCC编译器要使用GCC编译C语言程序,首先需要安装GCC编译器。

在Linux系统上,可以使用以下命令来安装GCC:```sudo apt-get install build-essential```在Windows系统上,可以下载MinGW安装包进行安装。

MinGW(Minimalist GNU for Windows)是一套在Windows上使用GCC编译器的工具集。

在Mac OS系统上,可以使用Homebrew包管理器来安装GCC编译器。

在终端上输入以下命令:```brew install gcc```步骤2:编写C语言程序要编译和运行C语言程序,首先需要编写一个C源代码文件。

C源代码文件通常以“.c”为扩展名。

可以编写一个简单的“hello world”程序,并将其保存为“hello.c”文件。

下面是一个示例程序:```#include <stdio.h>printf("Hello, World!");return 0;}```步骤3:使用GCC编译器编译C语言程序一旦编写好了C语言程序,就可以使用GCC编译器将其编译为可执行程序。

在终端上,进入C语言程序所在目录,并使用以下命令编译程序:```gcc -o hello hello.c```在这个命令中,“-o”参数指定编译器编译完后生成的可执行文件的名称。

在本例中,编译器将生成一个名为“hello”的可执行文件。

步骤4:运行已编译的C语言程序执行上述编译命令后,GCC编译器将生成一个可执行文件。

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

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

gcc的使用简介与命令行参数说明参考:《GNU gcc嵌入式系统开发作者:董文军》(一) gcc的基本用法(二) 警告提示功能选项(三) 库操作选项(四) 调试选项(五) 交叉编译选项(一) gcc的基本用法使用gcc编译器时,必须给出一系列必要的调用参数和文件名称。

不同参数的先后顺序对执行结果没有影响,只有在使用同类参数时的先后顺序才需要考虑。

如果使用了多个 -L 的参数来定义库目录,gcc会根据多个 -L 参数的先后顺序来执行相应的库目录。

因为很多gcc参数都由多个字母组成,所以gcc参数不支持单字母的组合,Linux中常被叫短参数(short options),如 -dr 与 -d -r 的含义不一样。

gcc编译器的调用参数大约有100多个,其中多数参数我们可能根本就用不到,这里只介绍其中最基本、最常用的参数。

gcc最基本的用法是:gcc [options] [filenames]其中,options就是编译器所需要的参数,filenames给出相关的文件名称,最常用的有以下参数:-c只编译,不链接成为可执行文件。

编译器只是由输入的 .c 等源代码文件生成 .o 为后缀的目标文件,通常用于编译不包含主程序的子程序文件。

-o output_filename确定输出文件的名称为output_filename。

同时这个名称不能和源文件同名。

如果不给出这个选项,gcc就给出默认的可执行文件 a.out 。

-g产生符号调试工具(GNU的 gdb)所必要的符号信息。

想要对源代码进行调试,就必须加入这个选项。

-O对程序进行优化编译、链接。

采用这个选项,整个源代码会在编译、链接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是编译、链接的速度就相应地要慢一些,而且对执行文件的调试会产生一定的影响,造成一些执行效果与对应源文件代码不一致等一些令人“困惑”的情况。

因此,一般在编译输出软件发行版时使用此选项。

gcc编译器使用简明指南

gcc编译器使用简明指南

gcc编译器使用简明指南gcc对文件的处理需要经过预处理->编译->汇编->链接的步骤,从而产生一个可执行文件,各部分对应不同的文件类型,具体如下:file.c c程序源文件file.i c程序预处理后文件file.cxx c++程序源文件,也可以是 / file.cpp / file.c++file.ii c++程序预处理后文件file.h c/c++头文件file.s 汇编程序文件file.o 目标代码文件gcc [选项]文件列表-ansi 强制完全ANSI一致-c 仅编译或汇编,生成目标代码文件,将.c、.i、.s等文件生成.o文件,其余文件被忽略-S 仅编译,不进行汇编和链接,将.c、.i等文件生成.s文件,其余文件被忽略-E 仅预处理,并发送预处理后的.i文件到标准输出,其余文件被忽略-o file 创建可执行文件并保存在file中,而不是默认文件a.out-g 产生用于调试和排错的扩展符号表,用于GDB调试,切记-g和-O通常不能一起使用-w 取消所有警告-W 给出更详细的警告-O [num]优化,可以指定0-3作为优化级别,级别0表示没有优化-x language 默认为-x none,即依靠后缀名确定文件类型,加上-x lan确定后面所有文件类型,直到下一个-x出现为止-D macro[=]类似于源程序里的#define,在-D macro中的macro可被源程序识别,例如gcc -D NUM -D FILE=\"bbs.txt\" hello.c -o hello,第一个-D选项定义宏NUM,在程序中可以使用#ifdef来检查是否被设置,第二个-D定义宏FILE,在源程序中可用-U macro 类似于源程序开头定义#undef macro,也就是取消源程序中的某个宏定义-I dir 将dir目录加到搜寻头文件的目录中去,并优先于gcc中缺省的搜索目录,有多个-I选项时,按照出现顺序搜索-L dir 将dir目录加到搜索-lname选项指定的函数库文件的目录列表中去,并优先于g cc缺省的搜索目录,有多个-L选项时,按照出现顺序搜索-lname 在链接时使用函数库libname.a,链接程序在-L dir指定的目录和/lib、/usr/li b目录下寻找该库文件,在没有使用-static选项时,如果发现共享函数库libname.so,则使用libname.so进行动态链接-fPIC 产生位置无关的目标代码,可用于构造共享函数库-static 禁止与共享函数库链接-shared 尽量与共享函数库链接(默认)1.编译单个文件vi hello.c //创建源文件hello.cgcc -o hello hello.c //编译为可执行文件hello,在默认情况下产生的可执行文件名为a.out ./hello //执行文件,如果只写hello是错误的,因为系统会将hello当指令来执行,然后报错2.编译多个源文件vi message.cgcc -c message.c //输出message.o文件,是一个已编译的目标代码文件vi main.cgcc -c main.c //输出main.o文件gcc -o all main.o message.o //执行连接阶段的工作,然后生成all可执行文件./all注意:gcc对如何将多个源文件编译成一个可执行文件有内置的规则,所以前面的多个单独步骤可以简化为一个命令。

gcc编译器的使用方法

gcc编译器的使用方法

GCC编译器在编译C代码时需要经过以下4个步骤:
1. 预处理:对.c源文件进行预处理(头文件展开和宏替换),生成.i文件。

2. 编译:对.i文件进行编译,生成.s汇编文件。

3. 汇编:对.s文件进行汇编,生成.o目标文件。

4. 链接:将.o文件与库文件进行链接,生成可执行文件。

GCC编译器命令格式及常用选项如下:
gcc [-c|-S|-E] [-std=standard] [-Idir] [-Ldir] [-o outfile] infile... [-lxxx]
其中,infile参数是所有的输入文件,例如源文件、目标文件、库文件等。

-E:仅对源文件进行预处理,不进行编译。

结果直接输出到显示屏。

-S:对源文件进行预处理、编译,不进行汇编。

结果以.s文件形式保存,与.c源文件同名。

-c:对源文件进行预处理、编译、汇编,不进行链接。

结果以.o文件形式保存,与.c源文件同名。

-save-temps:保存编译过程中所产生的所有中间文件。

中间文件名与.c源
文件同名,后缀为.i、.s、.o。

建议编译时始终带上-Wall选项。

gcc使用及参数说明

gcc使用及参数说明

gcc使⽤及参数说明通常所说的GCC是GUN Compiler Collection的简称,除了编译程序之外,它还含其他相关⼯具,所以它能把易于⼈类使⽤的⾼级语⾔编写的源代码构建成计算机能够直接执⾏的⼆进制代码。

GCC是Linux平台下最常⽤的编译程序,它是Linux平台编译器的事实标准。

同时,在Linux平台下的嵌⼊式开发领域,GCC也是⽤得最普遍的⼀种编译器。

GCC之所以被⼴泛采⽤,是因为它能⽀持各种不同的⽬标体系结构。

例如,它既⽀持基于宿主的开发(简单讲就是要为某平台编译程序,就在该平台上编译),也⽀持交叉编译(即在A平台上编译的程序是供平台B使⽤的)。

⽬前,GCC⽀持的体系结构有四⼗余种,常见的有X86系列、Arm、PowerPC等。

同时,GCC还能运⾏在不同的操作系统上,如Linux、Solaris、Windows等。

·详解GCC的下载和安装·Linux编程起步 GCC基本⽤法除了上⾯讲的之外,GCC除了⽀持C语⾔外,还⽀持多种其他语⾔,例如C++、Ada、Java、Objective-C、FORTRAN、Pascal等。

本系列⽂章中,我们不仅介绍GCC的基本功能,还涉及到⼀些诸如优化之类的⾼级功能。

另外,我们还考察GCC的⼀些映像操作⼯具,如size和objcopy等,这将在后续的⽂章中加以介绍。

⼆、程序的编译过程对于GUN编译器来说,程序的编译要经历预处理、编译、汇编、连接四个阶段,如下图所⽰:从功能上分,预处理、编译、汇编是三个不同的阶段,但GCC的实际操作上,它可以把这三个步骤合并为⼀个步骤来执⾏。

下⾯我们以C语⾔为例来谈⼀下不同阶段的输⼊和输出情况。

在预处理阶段,输⼊的是C语⾔的源⽂件,通常为*.c。

它们通常带有.h之类头⽂件的包含⽂件。

这个阶段主要处理源⽂件中的#ifdef、 #include和#define命令。

该阶段会⽣成⼀个中间⽂件*.i,但实际⼯作中通常不⽤专门⽣成这种⽂件,因为基本上⽤不到;若⾮要⽣成这种⽂件不可,可以利⽤下⾯的⽰例命令:gcc -E test.c -o test.i在编译阶段,输⼊的是中间⽂件*.i,编译后⽣成汇编语⾔⽂件*.s 。

Linux系统下gcc编程的基本使用教程

Linux系统下gcc编程的基本使用教程

Linux系统下gcc编程的基本使用教程1、什么是GCC和gcc?GCC是由GNU之父Stallman所开发的linux下的编译器,GCC最初的全名是GNU C Compiler,之后,随着GCC支持的语言越来越多,其全称变为GNU Compiler Collection即GNU编译器集合。

目前可以编译的语言包括:C, C++, Objective-C, Fortran, Java, and Ada。

gcc是则是GCC编译器集合下的c编译器。

(g++则是c++编译器)。

gcc编译器主要用于编译C和C++程序, 编译C++程序时通常使用g++命令, 实际上是gcc连接了libstdc++库。

我们主要了解一下gcc的使用。

2、gcc如何使用【1】使用环境首先使用gcc要在linux环境下,我们可以使用真正的linux系统(不过这么做可能有一些麻烦)或者使用一些windows下的虚拟软件,可以使用虚拟机搭建的linux环境,这样可以很方便的进行linux开发。

可以下载安装一个虚拟机软件,方法很简单和安装普通软件一样,安装linux系统有点麻烦,详情参考:Linux系统安装教程【2】文件命名规则在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。

而gcc则通过后缀来区别输入文件的类别,下面介绍gcc所遵循的部分约定规则。

.c为后缀的文件,C语言源代码文件;.a为后缀的文件,是由目标文件构成的库文件;.C,.cc或.cxx 为后缀的文件,是C++源代码文件;.h为后缀的文件,是程序所包含的头文件;.i 为后缀的文件,是已经预处理过的C源代码文件;.m为后缀的文件,是Objective-C源代码文件;.o为后缀的文件,是编译后的目标文件;.s为后缀的文件,是汇编语言源代码文件;.S为后缀的文件,是经过预编译的汇编语言源代码文件。

【3】编译过程gcc编译器在编译时, 都需要用四个步骤里的一个或多个处理输入文件, 这四个步骤是:预处理(Pre-Processing) 、编译(Compilation) 、汇编(Assembly) 、连接(Linking) 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

gcc编译器使用简明指南
gcc对文件的处理需要经过预处理->编译->汇编->链接的步骤,从而产生一个可执行文件,各部分对应不同的文件类型,具体如下:
file.c c程序源文件
file.i c程序预处理后文件
file.cxx c++程序源文件,也可以是 / file.cpp / file.c++
file.ii c++程序预处理后文件
file.h c/c++头文件
file.s 汇编程序文件
file.o 目标代码文件
gcc [选项]文件列表
-ansi 强制完全ANSI一致
-c 仅编译或汇编,生成目标代码文件,将.c、.i、.s等文件生成.o文件,其余文件被忽略
-S 仅编译,不进行汇编和链接,将.c、.i等文件生成.s文件,其余文件被忽略
-E 仅预处理,并发送预处理后的.i文件到标准输出,其余文件被忽略
-o file 创建可执行文件并保存在file中,而不是默认文件a.out
-g 产生用于调试和排错的扩展符号表,用于GDB调试,切记-g和-O通常不能一起使用
-w 取消所有警告
-W 给出更详细的警告
-O [num]优化,可以指定0-3作为优化级别,级别0表示没有优化
-x language 默认为-x none,即依靠后缀名确定文件类型,加上-x lan确定后面所有文件类型,直到下一个-x出现为止
-D macro[=]类似于源程序里的#define,在-D macro中的macro可被源程序识别,例如gcc -D NUM -D FILE=\"bbs.txt\" hello.c -o hello,第一个-D选项定义宏NUM,在程序中可以使用#ifdef来检查是否被设置,第二个-D定义宏FILE,在源程序中可用
-U macro 类似于源程序开头定义#undef macro,也就是取消源程序中的某个宏定义
-I dir 将dir目录加到搜寻头文件的目录中去,并优先于gcc中缺省的搜索目录,有多个-I选项时,按照出现顺序搜索
-L dir 将dir目录加到搜索-lname选项指定的函数库文件的目录列表中去,并优先于g cc缺省的搜索目录,有多个-L选项时,按照出现顺序搜索
-lname 在链接时使用函数库libname.a,链接程序在-L dir指定的目录和/lib、/usr/li b目录下寻找该库文件,在没有使用-static选项时,如果发现共享函数库libname.so,则使用libname.so进行动态链接
-fPIC 产生位置无关的目标代码,可用于构造共享函数库
-static 禁止与共享函数库链接
-shared 尽量与共享函数库链接(默认)
1.编译单个文件
vi hello.c //创建源文件hello.c
gcc -o hello hello.c //编译为可执行文件hello,在默认情况下产生的可执行文件名为a.out ./hello //执行文件,如果只写hello是错误的,因为系统会将hello当指令来执行,然后报错
2.编译多个源文件
vi message.c
gcc -c message.c //输出message.o文件,是一个已编译的目标代码文件
vi main.c
gcc -c main.c //输出main.o文件
gcc -o all main.o message.o //执行连接阶段的工作,然后生成all可执行文件
./all
注意:gcc对如何将多个源文件编译成一个可执行文件有内置的规则,所以前面的多个单独步骤可以简化为一个命令。

vi message.c
vi main.c
gcc -o all message.c main.c
./all
3.使用外部函数库
GCC常常与包含标准例程的外部软件库结合使用,几乎每一个linux应用程序都依赖于GNU C 函数库GLIBC。

vi trig.c
gcc -o trig -lm trig.c
GCC的-lm选项,告诉GCC查看系统提供的数学库libm。

函数库一般会位于目录/lib或者/usr/lib中。

4.共享函数库和静态函数库
静态函数库:每次当应用程序和静态连接的函数库一起编译时,任何引用的库函数的代码都会被直接包含进最终二进制程序。

共享函数库:包含每个库函数的单一全局版本,它在所有应用程序之间共享。

vi message.c
vi hello.c
gcc -c hello.c
gcc -fPIC -c message.c
gcc -shared -o libmessge.so message.o
其中,PIC命令行标记告诉GCC产生的代码不要包含对函数和变量具体内存位置的引用,这是因为现在还无法知道使用该消息代码的应用程序会将它链接到哪一段地址空间。

这样编译输出的文件message.o可以被用于建立共享函数库。

-shared标记将某目标代码文件变换成共享函数库文件。

gcc -o all -lmessage -L. hello.o
-lmessage标记来告诉GCC在连接阶段使用共享数据库libmessage.so,-L.标记告诉GCC 函数库可能在当前目录中,首先查找当前目录,否则GCC连接器只会查找系统函数库目录,在本例情况下,就找不到可用的函数库了。

相关文档
最新文档