gcc命令行详解

合集下载

GCC使用说明

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上的汇编语言怎么写)。

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

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

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对程序进⾏优化编译、链接。

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

因此,⼀般在编译输出软件发⾏版时使⽤此选项。

-O2⽐ -O 更好的优化编译、链接。

gcc命令的参数

gcc命令的参数

gcc命令的参数一、介绍GCC(GNU Compiler Collection)是一套广泛使用的编译器工具集,用于编译C、C++、Objective-C、Fortran等多种程序语言。

GCC命令的参数是指在使用GCC编译器时可以添加的选项和参数,通过这些参数可以对编译过程进行控制和定制,以满足不同的需求。

本文将详细介绍GCC命令的参数及其使用方法。

二、常用参数1. -o <file>指定输出文件的名称。

例如,gcc main.c -o main将编译main.c文件并输出可执行文件main。

2. -c只进行编译,不进行链接。

使用该参数可以将源代码编译为目标文件(.o文件),而不生成可执行文件。

3. -E只进行预处理,生成预处理后的代码。

该参数可用于查看预处理后的代码,以便调试和分析。

4. -g生成调试信息。

使用该参数可以在编译过程中生成调试信息,以便在调试程序时进行源代码级别的调试。

5. -Wall打开所有警告信息。

使用该参数可以让编译器输出所有可能的警告信息,帮助开发者发现潜在的问题。

6. -O优化选项。

GCC提供了多个优化选项,例如-O1、-O2、-O3等,可以根据需求选择不同级别的优化。

7. -I <dir>添加头文件搜索路径。

使用该参数可以告诉编译器在指定的目录中搜索头文件。

添加库文件搜索路径。

使用该参数可以告诉编译器在指定的目录中搜索库文件。

9. -l <library>链接指定的库文件。

使用该参数可以告诉编译器链接指定的库文件,例如-lm表示链接数学库。

10. -D <macro>定义宏。

使用该参数可以在编译过程中定义宏,以控制源代码中的条件编译。

三、高级参数1. -Werror将警告视为错误。

使用该参数可以将编译过程中的警告信息视为错误,编译过程将被中断。

2. -std=<standard>指定所使用的语言标准。

GCC支持多个语言标准,例如-std=c11表示使用C11标准。

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是生成的可执行文件名。

arm-linux-gcc 常用参数讲解 gcc编译器使用方法

arm-linux-gcc 常用参数讲解 gcc编译器使用方法

arm-linux-gcc常用参数讲解gcc编译器使用方法我们需要编译出运行在ARM平台上的代码,所使用的交叉编译器为arm-linux-gcc。

下面将arm-linux-gcc编译工具的一些常用命令参数介绍给大家。

在此之前首先介绍下编译器的工作过程,在使用GCC编译程序时,编译过程分为四个阶段:1. 预处理(Pre-Processing)2. 编译(Compiling)3. 汇编(Assembling)4. 链接(Linking)Linux程序员可以根据自己的需要让GCC在编译的任何阶段结束,以便检查或使用编译器在该阶段的输出信息,或者对最后生成的二进制文件进行控制,以便通过加入不同数量和种类的调试代码来为今后的调试做好准备。

和其它常用的编译器一样,GCC也提供了灵活而强大的代码优化功能,利用它可以生成执行效率更高的代码。

以文件example.c为例说明它的用法0. arm-linux-gcc -o example example.c不加-c、-S、-E参数,编译器将执行预处理、编译、汇编、连接操作直接生成可执行代码。

-o参数用于指定输出的文件,输出文件名为example,如果不指定输出文件,则默认输出a.out1. arm-linux-gcc -c -o example.oexample.c-c参数将对源程序example.c进行预处理、编译、汇编操作,生成example.0文件去掉指定输出选项"-o example.o"自动输出为example.o,所以说在这里-o加不加都可以2.arm-linux-gcc -S -o example.sexample.c-S参数将对源程序example.c进行预处理、编译,生成example.s文件-o选项同上3.arm-linux-gcc -E -o example.iexample.c-E参数将对源程序example.c进行预处理,生成example.i文件(不同版本不一样,有的将预处理后的内容打印到屏幕上)就是将#include,#define等进行文件插入及宏扩展等操作。

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 testfun.c //将testfun.c编译成testfun.o #gcc -c test.c //将test.c编译成test.o #gcc -o testfun.o test.o -o test //将testfun.o和test.o链接成test以上两种⽅法相⽐较,第⼀中⽅法编译时需要所有⽂件重新编译,⽽第⼆种⽅法可以只重新编译修改的⽂件,未修改的⽂件不⽤重新编译。

linuxgcc命令及用法

linuxgcc命令及用法Linux的gcc命令是一款非常强大的编译器,用于将源代码转换为可执行文件。

本文将详细介绍gcc命令及其常用的用法,帮助读者更好地理解和使用这款工具。

一、gcc命令的基本语法结构gcc是GNU Compiler Collection(GNU编译器集合)的简称,因此其命令基本语法结构一般为:shellgcc [选项] [输入文件]其中,选项用于指定编译时的相关参数,输入文件则是需要编译的源文件。

二、gcc命令的常用选项gcc命令提供了许多选项,用于控制编译过程及生成的可执行文件的属性。

下面是一些常用的gcc选项及其作用:1. -o:用于指定输出文件的名称。

例如,使用`-o myprogram`选项将输出文件命名为myprogram。

2. -c:仅进行编译,不进行链接操作。

这个选项常用于编译多个源文件时,先将每个源文件编译为目标文件,再进行链接操作。

3. -g:生成调试信息。

这个选项会在编译时生成与调试器兼容的调试信息,方便开发人员进行程序调试。

4. -Wall:显示所有警告信息。

使用这个选项可以使编译器在编译时输出更多的警告信息,帮助开发人员提前发现潜在的问题。

5. -I:指定头文件的搜索路径。

使用这个选项可以告诉编译器在指定的路径中查找头文件,方便引用外部库、模块等。

6. -L:指定库文件的搜索路径。

与-I选项类似,这个选项用于告诉编译器在指定的路径中查找库文件,用于链接时的库文件搜索。

7. -l:指定要链接的库文件。

使用这个选项可以显式地告诉编译器要链接的库文件,如:-lmath将链接math库文件。

三、gcc命令的应用实例下面通过几个实例来演示gcc命令的具体用法,以帮助读者更好地理解和掌握这款工具。

1. 编译单个源文件并生成可执行文件假设我们有一个名为`hello.c`的源文件,内容如下:c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}我们可以使用以下命令将其编译为可执行文件`hello`:shellgcc -o hello hello.c编译成功后,即可在当前目录下生成名为`hello`的可执行文件。

简述gcc命令的选项

简述gcc命令的选项gcc命令是一个常用的编译器命令,用于编译和链接C、C++等程序。

它有许多选项可以用来控制编译过程中的行为。

本文将简要介绍gcc 命令的一些常用选项。

1. -c选项:该选项用于编译源文件,生成目标文件,但不进行链接。

例如,gcc -c test.c会将test.c编译为test.o。

2. -o选项:该选项用于指定生成的可执行文件的名称。

例如,gcc -o test test.c会将test.c编译为名为test的可执行文件。

3. -g选项:该选项用于在生成的可执行文件中包含调试信息,以便于调试程序。

例如,gcc -g test.c会生成一个包含调试信息的可执行文件。

4. -Wall选项:该选项用于打开所有警告信息。

例如,gcc -Wall test.c会显示所有的警告信息。

5. -I选项:该选项用于指定头文件的搜索路径。

例如,gcc -I/usr/include test.c会在/usr/include目录中搜索头文件。

6. -L选项:该选项用于指定库文件的搜索路径。

例如,gcc -L/usr/lib test.c会在/usr/lib目录中搜索库文件。

7. -l选项:该选项用于指定需要链接的库文件。

例如,gcc -lmylib test.c会将名为libmylib.so或libmylib.a的库文件链接到可执行文件中。

8. -D选项:该选项用于定义预处理器宏。

例如,gcc -DDEBUG test.c 会定义一个名为DEBUG的宏。

9. -E选项:该选项用于只进行预处理,并将结果输出到标准输出。

例如,gcc -E test.c会将test.c进行预处理,并将结果输出到屏幕上。

10. -S选项:该选项用于只进行编译,并将结果输出为汇编代码。

例如,gcc -S test.c会将test.c编译为test.s。

11. -O选项:该选项用于指定优化级别。

例如,gcc -O2 test.c会进行优化级别为2的优化。

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常⽤命令详解GCC(GNU Compiler Collection)是Linux下最常⽤的C语⾔编译器,是GNU项⽬中符合ANSI C标准的编译系统,能够编译⽤C、C++和Object C等语⾔编写的程序。

同时它可以通过不同的前端模块来⽀持各种语⾔,如Java、Fortran、Pascal、Modula-3和Ada等。

穿插⼀个玩笑: GNU意思是GNU’s not Unix⽽⾮⾓马。

然⽽GNU还是⼀个未拆分的连词,这其实是⼀个源于hacker的幽默:GNU是⼀个回⽂游戏,第⼀个字母G是凑数的,你当然可以叫他做ANU或者BNU。

下⾯开始。

⼀.CC编译程序过程分四个阶段◆预处理(Pre-Processing)◆编译(Compiling)◆汇编(Assembling)◆链接(Linking)Linux程序员可以根据⾃⼰的需要让GCC在编译的任何阶段结束转去检查或使⽤编译器在该阶段的输出信息,或者对最后⽣成的⼆进制⽂件进⾏控制,以便通过加⼊不同数量和种类的调试代码来为今后的调试做好准备。

如同其他的编译器,GCC也提供了灵活⽽强⼤的代码优化功能,利⽤它可以⽣成执⾏效率更⾼的代码。

GCC提供了30多条警告信息和三个警告级别,使⽤它们有助于增强程序的稳定性和可移植性。

此外,GCC还对标准的C和C++语⾔进⾏了⼤量的扩展,提⾼程序的执⾏效率,有助于编译器进⾏代码优化,能够减轻编程的⼯作量。

⼆.简单编译命令我们以Hello world程序来开始我们的学习。

代码如下:/* hello.c */#include <stdio.h>int main(void){printf ("Hello world!\n");return 0;}1. 执⾏如下命令:$ gcc -o hello hello.c运⾏如下: $ ./hello输出: Hello,world!2. 我们也可以分步编译如下:(1) $ gcc –E hello.c -o hello.i//预处理结束//这时候你看⼀下hello.i ,可以看到插进去了很多东西。

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

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'错误?首先这是链接错误,不是编译错误,也就是说如果只有这个错误,说明你的程序源码本身没有问题,是你用编译器编译时参数用得不对,你没有指定链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译参数里指定程序要链接数学库,方法是在编译命令行里加入-lm4、-l参数和-L参数-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?-lname,在连接时,装载名字为“libname.a”的函数库:-lm表示连接名为“libm.a”的数学函数库。

就拿数学库来说,他的库名是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参数跟着的是库文件所在的目录名。

再比如我们把libtest.so放在/aaa/bbb/ccc目录下,那链接参数就是-L/aaa/bbb/ccc -ltest另外,大部分libxxxx.so只是一个链接,以RH9为例,比如libm.so它链接到/lib/libm.so.x,/lib/libm.so.6又链接到/lib/libm-2.3.2.so,如果没有这样的链接,还是会出错,因为ld只会找libxxxx.so,所以如果你要用到xxxx库,而只有libxxxx.so.x或者libxxxx-x.x.x.so,做一个链接就可以了ln -s libxxxx-x.x.x.so libxxxx.so手工来写链接参数总是很麻烦的,还好很多库开发包提供了生成链接参数的程序,名字一般叫xxxx-config,一般放在/usr/bin目录下,比如gtk1.2的链接参数生成程序是gtk-config,执行gtk-config --libs就能得到以下输出"-L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic-lgmodule -lglib -ldl -lXi -lXext -lX11 -lm",这就是编译一个gtk1.2程序所需的gtk链接参数,xxx-config除了--libs参数外还有一个参数是--cflags用来生成头文件包含目录的,也就是-I参数,在下面我们将会讲到。

你可以试试执行gtk-config--libs --cflags,看看输出结果现在的问题就是怎样用这些输出结果了,最笨的方法就是复制粘贴或者照抄,聪明的办法是在编译命令行里加入这个`xxxx-config --libs --cflags`,比如编译一个gtk程序:gcc gtktest.c `gtk-config --libs --cflags`这样就差不多了。

注意`不是单引号,而是1键左边那个键。

除了xxx-config以外,现在新的开发包一般都用pkg-config来生成链接参数,使用方法跟xxx-config类似,但xxx-config是针对特定的开发包,但pkg-config包含很多开发包的链接参数的生成,用pkg-config --list-all命令可以列出所支持的所有开发包,pkg-config的用法就是pkg -config pagName --libs --cflags,其中pagName是包名,是pkg-config--list-all里列出名单中的一个,比如gtk1.2的名字就是gtk+,pkg-config gtk+ --libs --cflags的作用跟gtk-config --libs --cflags是一样的。

比如:gcc gtktest.c `pkg-config gtk+ --libs --cflags`5、-include和-I参数-include用来包含头文件,但一般情况下包含头文件都在源码里用#include xxxxxx实现,-include参数很少用。

-I参数是用来指定头文件目录,/usr/include目录一般是不用指定的,gcc知道去那里找,但是如果头文件不在/usr/include里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上-I/myinclude参数了,如果不加你会得到一个"xxxx.h: No such file or directory"的错误。

-I参数可以用相对路径,比如头文件在当前目录,可以用-I.来指定。

上面我们提到的--cflags参数就是用来生成-I参数的6、-O参数这是一个程序优化参数,一般用-O2就是,用来优化程序用的,比如gcc test.c -O2,优化得到的程序比没优化的要小,执行速度可能也有所提高7、-shared参数编译动态库时要用到,比如gcc -shared test.c -o libtest.so8、几个相关的环境变量PKG_CONFIG_PATH:用来指定pkg-config用到的pc文件的路径,默认是/usr/lib/pkgconfig,pc文件是文本文件,扩展名是.pc,里面定义开发包的安装路径,Libs参数和Cflags参数等等。

CC:用来指定c编译器CXX:用来指定cxx编译器LIBS:跟上面的--libs作用差不多CFLAGS:跟上面的--cflags作用差不多CC,CXX,LIBS,CFLAGS手动编译时一般用不上,在做configure时有时用到,一般情况下不用管环境变量设定方法:export ENV_NAME=xxxxxxxxxxxxxxxxx9、关于交叉编译交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上,比如在我们地PC平台(X86 CPU)上编译出能运行在sparcCPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到sparc CPU平台上才能运行。

当然两个平台用的都是linux这种方法在异平台移植和嵌入式开发时用得非常普遍相对与交叉编译,我们平常做的编译就叫本地编译,也就是在当前平台编译,编译得到的程序也是在本地执行用来编译这种程序的编译器就叫交叉编译器,相对来说,用来做本地编译的就叫本地编译器,一般用的都是gcc,但这种gcc跟本地的gcc编译器是不一样的,需要在编译gcc时用特定的configure参数才能得到支持交叉编译的gcc为了不跟本地编译器混淆,交叉编译器的名字一般都有前缀,比如sparc-xxxx-linux-gnu-gcc,sparc-xxxx-linux-gnu-g++ 等等10、交叉编译器的使用方法使用方法跟本地的gcc差不多,但有一点特殊的是:必须用-L和-I参数指定编译器用sparc系统的库和头文件,不能用本地(X86)的库(头文件有时可以用本地的)例子:sparc-xxxx-linux-gnu-gcc test.c -L/path/to/sparcLib -I/path/to/sparcIncludegcc与g++Linux 中最重要的软件开发工具是GCC。

GCC 是GNU 的C 和C++ 编译器。

实际上,GCC 能够编译三种语言:C、C++ 和Object C(C 语言的一种面向对象扩展)。

利用gcc 命令可同时编译并连接 C 和C++ 源程序。

GCC 可同时用来编译C 程序和C++ 程序。

一般来说,C 编译器通过源文件的后缀名来判断是 C 程序还是C++ 程序。

在Linux 中,C 源文件的后缀名为 .c,而C++ 源文件的后缀名为 .C 或 .cpp。

gcc 命令只能编译C++ 源文件,而不能自动和C++ 程序使用的库连接。

因此,通常使用g++ 命令来完成C++ 程序的编译和连接,该程序会自动调用gcc 实现编译。

选项解释-ansi 只支持ANSI 标准的C 语法。

这一选项将禁止GNU C 的某些特色,例如asm 或typeof 关键词。

-c 只编译并生成目标文件。

-DMACRO 以字符串“1”定义MACRO 宏。

-DMACRO=DEFN 以字符串“DEFN”定义MACRO 宏。

-E 只运行C 预编译器。

-g 生成调试信息。

GNU 调试器可利用该信息。

-IDIRECTORY 指定额外的头文件搜索路径DIRECTORY。

-LDIRECTORY 指定额外的函数库搜索路径DIRECTORY。

-lLIBRARY 连接时搜索指定的函数库LIBRARY。

-m486 针对486 进行代码优化。

-o FILE 生成指定的输出文件。

用在生成可执行文件时。

-O0 不进行优化处理。

-O 或-O1 优化生成代码。

-O2 进一步优化。

-O3 比-O2 更进一步优化,包括inline 函数。

-shared 生成共享目标文件。

通常用在建立共享库时。

-static 禁止使用共享连接。

-UMACRO 取消对MACRO 宏的定义。

-w 不生成任何警告信息。

-Wall 生成所有警告信息。

例子:GCC编译OpengL: gcc hello.c -o hello -L/usr/X11R6/lib/ -lGL -lGLU -lglut。

相关文档
最新文档