gcc命令大全

合集下载

gcc 编译器命令总结

gcc 编译器命令总结

gcc 编译器命令总结1. 三种常用格式i.gcc C源文件-o 目标文件名。

ii.gcc -o 目标文件名C源文件。

iii.gcc C源文件。

(目标文件名默认为:a.out)2. gcc 支持的一些源文件的后缀.c C语言源代码文件。

.a 是由目标文件构成的档案库文件。

.C .cc 或.cxx 是C++ 源代码文件。

.h 是程序所包含的头文件。

.i 是已经预处理过的C源代码文件。

.ii 是已经预处理的C++源代码文件。

.m 是Objective-C源代码文件。

.o 是编译后的目标文件。

.s 是汇编语言源代码文件。

.S 是经过预处理的汇编语言源代码文件。

3.gcc 常用参数-c 只激活预处理,编译和汇编,也就是只把程序做成obj文件。

-S 只激活预处理和编译,就是把文件编译成汇编代码。

-E 只激活预处理,不生成文件,需要把它重定向到一个输出文件里面。

-g 在可执行文件中包含调试信息。

-v 显示gcc 版本信息。

-o file 把输出文件输出到文件中。

-I dir 在头文件的搜索路径中添加dir 目录。

-L dir 在库文件的搜索路径列表中添加dir目录。

-static 链接静态库。

-library 连接名为library的库文件。

4.例子实质上,上述编译过程是分为四个阶段进行的,即预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编 (Assembly)和连接(Linking)。

4.1 示例程序如下:#include <stdio.h>int main(void){printf("Hello World!\n");return 0;}这个程序,一步到位的编译指令是:gcc test.c -o test该命令结束后,在文件目下生成(可执行文件)test通过./test 可运行本程序。

4.2 预处理gcc -E test.c -o test.i 或gcc -E test.c可以输出test.i文件中存放着test.c经预处理之后的代码。

gcc命令行详解

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'错误?首先这是链接错误,不是编译错误,也就是说如果只有这个错误,说明你的程序源码本身没有问题,是你用编译器编译时参数用得不对,你没有指定链接程序要用到得库,比如你的程序里用到了一些数学函数,那么你就要在编译参数里指定程序要链接数学库,方法是在编译命令行里加入-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参数跟着的是库文件所在的目录名。

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编译选项参数1. -o,指定输出文件的名称。

例如,gcc -o output main.c将生成一个名为output的可执行文件。

2.-c,只编译源文件但不链接生成可执行文件。

这个选项可以用于分离编译,将源代码和编译后的目标文件分开存放。

3.-g,生成包含调试信息的可执行文件。

这个选项可用于在程序出错时进行调试。

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

这个选项用于尽可能多地检测潜在的错误。

5. -Werror,将警告视为错误。

这个选项会将所有警告信息转化为编译错误,编译过程中如果遇到任何警告就会停止编译。

6. -std,指定所使用的C或C++的标准版本。

例如,-std=c99指定使用C99标准。

7.-I,指定额外的头文件路径。

可以通过多次使用该选项来指定多个路径。

8.-L,指定额外的库文件路径。

可以通过多次使用该选项来指定多个路径。

9. -l,指定要链接的库文件。

例如,-lmath将链接数学库。

10.-O,指定优化级别。

有多个优化级别可选,从-O0(不进行任何优化)到-O3(进行最高级别的优化)。

11.-D,定义预处理宏。

可以使用-D定义宏并为其指定值。

例如,-DDEBUG定义一个名为DEBUG的宏。

12.-U,取消预定义宏的定义。

可以使用-U取消已定义的宏。

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

可以通过这个选项将预处理后的代码输出到标准输出或另一个文件中。

14.-S,只进行编译,生成汇编代码。

可以通过这个选项将汇编代码输出到标准输出或另一个文件中。

15. -shared,生成共享库文件。

这个选项可以用于生成可供其他程序调用的动态链接库。

16.-fPIC,生成位置无关的代码。

这个选项可以用于在共享库中使用。

17. -pthread,为多线程程序链接额外的线程库。

18. -march,指定目标处理器的架构。

例如,-march=armv7指定目标处理器是ARMv7架构。

19. -mfpu,指定使用的浮点单元类型。

gcc 编译指令

gcc 编译指令

gcc 编译指令
GCC(GNU Compiler Collection)是一个开源的编译器套件,用于编译和生成可执行文件。

它支持多种编程语言,如C、C++、Objective-C、Fortran等。

下面是一些常用的GCC编译指令:编译C源文件并生成可执行文件:
gcc source.c -o output
编译C++源文件并生成可执行文件:
g++ source.cpp -o output
指定编译优化级别(例如-O2):
gcc source.c -o output -O2
生成调试信息(用于调试程序):
gcc source.c -o output -g
链接其他库文件:
gcc source.c -o output -l library
指定包含头文件的目录:
gcc source.c -o output -I include_directory
生成位置无关代码(用于动态链接):
gcc source.c -o output -fPIC
生成静态库文件:
gcc -c source.c
ar rcs libname.a source.o
这些只是一些常用的GCC编译指令示例,GCC还支持更多的编译选项和功能。

你可以查阅GCC的官方文档或使用gcc --help命令获取更多的信息和使用方法。

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命令及用法

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命令的选项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的优化。

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

GCC 选项GCC 有超过100个的编译选项可用. 这些选项中的许多你可能永远都不会用到, 但一些主要的选项将会频繁用到. 很多的GCC 选项包括一个以上的字符. 因此你必须为每个选项指定各自的连字符, 并且就象大多数Linux 命令一样你不能在一个单独的连字符后跟一组选项. 例如, 下面的两个命令是不同的:gcc -p -g test.cgcc -pg test.c第一条命令告诉GCC 编译test.c 时为prof 命令建立剖析(profile)信息并且把调试信息加入到可执行的文件里. 第二条命令只告诉GCC 为gprof 命令建立剖析信息.当你不用任何选项编译一个程序时, GCC 将会建立(假定编译成功)一个名为a.out 的可执行文件. 例如, 下面的命令将在当前目录下产生一个叫a.out 的文件:gcc test.c你能用-o 编译选项来为将产生的可执行文件指定一个文件名来代替 a.out. 例如, 将一个叫count.c 的C 程序编译为名叫count 的可执行文件, 你将输入下面的命令:gcc -o count count.c注意: 当你使用-o 选项时, -o 后面必须跟一个文件名.-c 只编译并生成目标文件。

--------------------------------------------------------------------------------gcc and g++分别是gnu的c & c++编译器gcc/g++在执行编译工作的时候,总共需要4步1.预处理,生成.i的文件[预处理器cpp]2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]4.连接目标代码,生成可执行程序[链接器ld][参数详解]-x language filename设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定C 语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp,如果你很个性,决定你的C 代码文件的后缀名是.pig 哈哈,那你就要用这个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数的使用。

可以使用的参数吗有下面的这些`c', `objective-c', `c-header', `c++', `cpp-output', `assembler', and `assembler-with-cpp'.看到英文,应该可以理解的。

例子用法:gcc -x c hello.pig-x none filename关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型例子用法:gcc -x c hello.pig -x none hello2.c-c只激活预处理,编译,和汇编,也就是他只把程序做成obj文件例子用法:gcc -c hello.c他将生成.o的obj文件-S只激活预处理和编译,就是指把文件编译成为汇编代码。

例子用法gcc -S hello.c他将生成.s的汇编代码,你可以用文本编辑器察看-E只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.例子用法:gcc -E hello.c > pianoapan.txtgcc -E hello.c | more慢慢看吧,一个hello word 也要与处理成800行的代码-o制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,很难听,如果你和我有同感,改掉它,哈哈例子用法gcc -o hello.exe hello.c (哦,windows用习惯了)gcc -o hello.asm -S hello.c-pipe使用管道代替编译中临时文件,在使用非gnu汇编工具的时候,可能有些问题gcc -pipe -o hello.exe hello.c-ansi关闭gnu c中与ansi c不兼容的特性,激活ansi c的专有特性(包括禁止一些asm inline typeof关键字,以及UNIX,vax等预处理宏,-fno-asm此选项实现ansi选项的功能的一部分,它禁止将asm,inline和typeof 用作关键字。

-fno-strict-prototype只对g++起作用,使用这个选项,g++将对不带参数的函数,都认为是没有显式的对参数的个数和类型说明,而不是没有参数.而gcc无论是否使用这个参数,都将对没有带参数的函数,认为城没有显式说明的类型-fthis-is-varialble就是向传统c++看齐,可以使用this当一般变量使用.-fcond-mismatch允许条件表达式的第二和第三参数类型不匹配,表达式的值将为void类型-funsigned-char-fno-signed-char-fsigned-char-fno-unsigned-char这四个参数是对char类型进行设置,决定将char类型设置成unsigned char(前两个参数)或者signed char(后两个参数)-include file包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以用它设定,功能就相当于在代码中使用#include<filename>例子用法:gcc hello.c -include /root/pianopan.h-imacros file将file文件的宏,扩展到gcc/g++的输入文件,宏定义本身并不出现在输入文件中-Dmacro相当于C语言中的#define macro-Dmacro=defn相当于C语言中的#define macro=defn-Umacro相当于C语言中的#undef macro-undef取消对任何非标准宏的定义-Idir在你是用#include"file"的时候,gcc/g++会先在当前目录查找你所制定的头文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他回先在你所制定的目录查找,然后再按常规的顺序去找.对于#include<file>,gcc/g++会到-I制定的目录查找,查找不到,然后将到系统的缺省的头文件目录查找-I-就是取消前一个参数的功能,所以一般在-Idir之后使用-idirafter dir在-I的目录里面查找失败,讲到这个目录里面查找.-iprefix prefix-iwithprefix dir一般一起使用,当-I的目录查找失败,会到prefix+dir下查找-nostdinc使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头文件的位置-nostdin C++规定不在g++指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创libg++库使用-C在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的-M生成文件关联的信息。

包含目标文件所依赖的所有源代码你可以用gcc -M hello.c来测试一下,很简单。

-MM和上面的那个一样,但是它将忽略由#include<file>造成的依赖关系。

-MD和-M相同,但是输出将导入到.d的文件里面-MMD和-MM相同,但是输出将导入到.d的文件里面-Wa,option此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选项,然后传递给会汇编程序-Wl.option此选项传递option给连接程序;如果option中间有逗号,就将option分成多个选项,然后传递给会连接程序.-llibrary制定编译的时候使用的库例子用法gcc -lcurses hello.c使用ncurses库编译程序-Ldir制定编译的时候,搜索库的路径。

比如你自己的库,可以用它制定目录,不然编译器将只在标准库的目录找。

这个dir就是目录的名称。

-O0-O1-O2-O3编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高-g只是编译器,在编译的时候,产生调试信息。

-gstabs此选项以stabs格式声称调试信息,但是不包括gdb调试信息.-gstabs+此选项以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.-ggdb此选项将尽可能的生成gdb的可以使用的调试信息.-static此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么动态连接库,就可以运行.-share此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库. -traditional试图让编译器支持传统的C语言特性[参考资料]-Linux/UNIX高级编程中科红旗软件技术有限公司编著.清华大学出版社出版-Gcc man page[ChangeLog]-2002-08-10ver 0.1 发布最初的文档-2002-08-11ver 0.11 修改文档格式-2002-08-12ver 0.12 加入了对静态库,动态库的参数-2002-08-16ver 0.16 增加了gcc编译的4个阶段的命令运行gcc/egcs**********运行gcc/egcs***********************GCC 是GNU 的C 和C++ 编译器。

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

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

如果你有两个或少数几个C 源文件,也可以方便地利用GCC 编译、连接并生成可执行文件。

例如,假设你有两个源文件main.c 和factorial.c 两个源文件,现在要编译生成一个计算阶乘的程序。

代码:-----------------------清单factorial.c-----------------------int factorial (int n){if (n <= 1)return 1;elsereturn factorial (n - 1) * n;}-----------------------清单main.c-----------------------#include<stdio.h>#include<unistd.h>int factorial (int n);int main (int argc, char **argv){int n;if (argc < 2){printf ("Usage: %s n\n", argv [0]);return -1;}else{n = atoi (argv[1]);printf ("Factorial of %d is %d.\n", n, factorial (n));}return 0;}-----------------------利用如下的命令可编译生成可执行文件,并执行程序:$ gcc -o factorial main.c factorial.c$ ./factorial 5Factorial of 5 is 120.GCC 可同时用来编译C 程序和C++ 程序。

相关文档
最新文档