GCC编译选项

合集下载

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编译参数在GCC中,编译参数用于指定编译器的行为和选项。

这些参数可以对代码进行优化、生成调试信息、链接不同的库等等。

以下是一些常用的GCC编译参数:1.优化参数:--O0:不进行优化--O1:进行基本优化--O2:进行更多优化--O3:进行最大优化--Os:进行优化以缩小代码尺寸2.调试参数:--g:生成调试信息- -ggdb:生成GDB可用的调试信息- -gdwarf:生成DWARF调试信息3.警告参数:- -Wall:开启所有警告- -Werror:将所有警告视为错误- -Wextra:开启额外的警告- -Wno-unused-parameter:忽略未使用的函数参数的警告4.标准库参数:- -std=c89:使用C89标准- -std=c99:使用C99标准- -std=c11:使用C11标准- -std=c++98:使用C++98标准- -std=c++11:使用C++11标准- -std=c++14:使用C++14标准- -std=c++17:使用C++17标准5.预处理参数:- -D<symbol>=<value>:定义宏- -U<symbol>:取消宏定义- -I<dir>:指定头文件路径6.链接参数:- -L<dir>:指定库文件路径- -l<library>:链接库文件- -shared:生成共享库- -static:生成静态库7.其他参数:--c:只编译,不链接- -o <output>:指定输出文件名- -Wl,<option>:传递选项给链接器- -Wp,<option>:传递选项给预处理器这只是一小部分常用的GCC编译参数,GCC还提供了许多其他参数用于更精细地控制编译过程。

可以通过运行`gcc --help`命令查看GCC支持的所有编译参数。

简述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的优化。

GCC常用的编译、链接选项

GCC常用的编译、链接选项

GCC常⽤的编译、链接选项GCC 的命令的权威解释还是要查询官⽅⽹站,同时⼀些链接选项不⽅便在⽹站上查询可以利⽤操作系统的 man 指令来查询(⽐如 man ld),这⾥记录⼀些常⽤选项,不定时更新。

1.最常⽤的选项: -o file 输出⽬标⽂件; -E 将源⽂件进⾏预处理;gcc -E test.c -o test.i -S 将源⽂件进⾏汇编处理;gcc -S test.c -o test.s -c 编译源⽂件;gcc -c test.c -o test.o 最终链接步骤:gcc test1.o test2.o test3.o -o test -Wall 打开所有的警告gcc -c test.c -Wall -o test -O打开优化选项: -O0 (默认)减少编译时间,⽣成 debug 级别的结果; -O1/O2/O3 优化级别逐级上升,⼀般 release 版本的优化等级都会采⽤ O2 级别;gcc -c test.c -O2 -o test -g ⽣成当前系统本地格式化的调试信息, GDB 可识别并调试; -ggdb 专门为 gdb ⽣成调试信息;gcc test.c -o test -ggdb test -shared ⽣成⼀个可执⾏⽂件可以动态链接的共享库,这是个链接选项,编译⽣成共享库的⽬标⽂件的源⽂件时通常需要添加编译选项 -fpic; -fpic ⽣成位置⽆关代码,在编译共享库的⽬标⽂件时使⽤,这是⼀个编译选项;gcc -c test.c -o test.o -fpicgcc -shared -o libtest.so test.o -I(⼤写 i) (-Idir 或者 -I dir)添加头⽂件搜索⽬录, 这是⼀个编译选项;test.c 包含 test.h, test.h 位于./inc 中gcc -c test.c -o test.o -I inc -l(⼩写L) (-llib 或者 -l lib)执⾏链接时的共享库名称,如当前有⼀个共享库 libcshare.so, 那么链接命令如下:gcc test.c -o test -lcshare 或gcc test.c -o test -l cshare 如果当前链接⽬录下同时存在相同名称的共享库和静态库,⽐如libcshare.so、libcshare.a,在不加任何选项的情况下,编译器优先选择链接共享库,除⾮添加-static; -L (-L dir)添加链接时共享库搜索⽬录;gcc test.c -o test -lcshare -L/xx/xx -std= 选择适配的 C/C++ 标准版本,可选的有 c89/c90/c99/c11 等;C++有c++98/c++11/c++14等等;2.其他常⽤选项; -M 为 GNU make 输出显式依赖规则,包含标准库头⽂件及系统头⽂件; -MM 类似于 -M, 但是只会包含当前⼯程的头⽂件依赖; -MF file 把依赖结果写⼊到 file;gcc -M test.c -Ixxx/xxxgcc -MM test.c -Ixxx/xxxgcc -MM test.c -Ixxx/xxx -MF test.d 然后查看依赖⽂件:cat test.dtest.o: test.c xxx/xxx/test.h 此外还有其他常⽤的链接选项: -Wl,-Bsymbolic 优先使⽤本地符号, 防⽌链接当前共享库的应⽤程序中的符号覆盖当前共享库中同名的符号; -Wl,-soname,libtest.so.1 设置共享库的 SONAME 为 libtest.so.1,readelf -d libtest.so 可以查看共享库的 SONAME; -Wl,-rpath=/xxx/xxx 设置运⾏时共享库搜索⽬录; -Wl,-rpath=. 设置运⾏时的共享库搜索⽬录优先选择当前⽬录; -Wl,--version-script=test.map 控制共享库的导出符号,符号表的形式为:VER_1 { global: test1; test2; test3; local: *;};VER_2 { global: test4;} VER_1; #依赖于版本1 如果只需要控制符号表,可以写成如下形式:{ global: test1; test2; test3; local:*;}; -Wl,--retain-symbols-file=test.sym 控制静态库的导出符号,test.sym 的格式如下test1test2test3 创建共享库时,添加以上链接选项可以同时控制静态库导出符号和共享库导出符号,如下所⽰:gcc test1.o test2.o test3.o test4.o -o libtest.so -shared -Wl,--version-script=test.map,--retain-symbols-file=test.sym3.另⼀种控制符号导出的⽅式 -fvisibility=[default|internal|hidden|protected] 如果要公开你的接⼝或者 API,那么就需要将 __attribute__ ((visibility ("xxxxxx"))) 放在你需要公开的结构、类或者函数声明中,然后在编译选项中增加 -fvisibility=xxxx(可选的项有 default、internal、hidden 和 protected)。

GCC编译选项和环境变量

GCC编译选项和环境变量

GCC编译选项和环境变量https:///DLUTXIE/article/details/8176164本⽂由GCC⼿册翻译得到,英语能⼒有限,翻译得不太好,仅为⾃⼰做记录,⽤于理解GCC编译时头⽂件及库⽂件的查找路径问题。

-Idir表⽰增加dir为头⽂件的搜索路径,这个路径优先于系统的默认路径,所以⽤⾃⼰指定的头⽂件来替代系统默认的头⽂件。

但是不要⽤这个选项来指定路径不要包括供应商提供的系统头⽂件(这个情况可以⽤-isystem),如果有多个-I选项,则路径的搜索先后顺序是从左到右的。

,即在前⾯的路径会被选搜索。

另外,如果dir以=号开头即如–I=dir,⽽其中的=号为被sysroot前缀替换。

如果⼀个标准系统包含的⽬录或者⽤-isystem选项指定的⽬录同时⽤了-I选项,则-I选项会被忽略。

那个⽬录仍然会被搜索,只是和没有指定-I选项时⼀样。

这是为了确保GCC程序能过够修复系统头⽂件的bug和⾮故意的改变include_next指令的顺序。

如果你确实需要改变系统路径的搜索顺序,那你可以⽤”-nostdinc” 和/或者“-isystem”选项。

-nostdinc该选项指⽰不要搜索头⽂件的标准路径(即默认路径),⽽只搜索-I选项指定的路径和当前路径。

-isysroot dir该选项和—sysroot选项差不多,但只⽤于搜索头⽂件。

--sysroot=dir⽤dir作为头⽂件和库⽂件的逻辑根⽬录,例如,正常情况下,如果编译器在/usr/include搜索头⽂件,在/usr/lib下搜索库⽂件,它将⽤dir/usr/include和dir/usr/lib替代原来的相应路径。

如果你同时使⽤了-isysroot选项,则—sysroot会应⽤于库⽂件的搜索⽽-isysroot会⽤于搜索头⽂件。

-system dir该选项⽤于搜索头⽂件,但该选项指定的⽬录估在-I选项指定的⽬录后搜索⽽在系统默认路径前搜索。

gcc基本命令

gcc基本命令

gcc基本命令一、引言GCC是一款广泛使用的编译器,它可以将高级语言编写的程序转换成机器语言,从而使得计算机能够运行这些程序。

本文将介绍GCC 的基本命令,包括编译、链接等操作。

二、编译源代码编译是将源代码转换成目标文件的过程。

GCC提供了多种编译选项,可以用来指定编译的方式和参数。

下面是一些常用的编译命令及其说明:1. gcc -c source.c -o object.o该命令将源代码文件source.c编译成目标文件object.o。

选项“-c”表示只编译,不进行链接操作。

选项“-o”用于指定输出文件的名称。

2. gcc -E source.c -o preprocessed.c该命令将预处理源代码文件source.c输出到preprocessed.c文件中。

选项“-E”表示只进行预处理操作,不进行编译和链接。

3. gcc -S source.c -o assembly.s该命令将源代码文件source.c编译成汇编代码文件assembly.s。

选项“-S”表示只生成汇编代码,不进行后续的编译和链接。

三、链接目标文件链接是将多个目标文件合并成可执行文件的过程。

GCC提供了多种链接选项,用于指定链接的方式和参数。

下面是一些常用的链接命令及其说明:1. gcc object1.o object2.o -o executable该命令将目标文件object1.o和object2.o链接成可执行文件executable。

选项“-o”用于指定输出文件的名称。

2. gcc object1.o object2.o -o executable -lm该命令将目标文件object1.o和object2.o链接成可执行文件executable,并且链接了数学库libm。

选项“-lm”用于指定链接的数学库。

四、其他常用命令除了编译和链接命令外,GCC还提供了其他一些常用的命令,用于查看版本信息、优化编译结果等。

gcc 编译命令

gcc 编译命令

gcc 编译命令GCC计算机科学中的重要概念,它的全称是GNU Compiler Collection,它是一种免费的开源编译器,可以用于将高级语言编写的源代码编译成机器语言,进而可以在程序运行。

GCC经成为当今最广泛使用的编译器,因为它有许多优点:它可以帮助开发人员编写优秀的代码,还支持多种语言,其中包括C、C++、Objective-C、Java Fortran。

这里介绍一些常用的 GCC译命令。

首先,最基本的是 gcc令,这一命令能够帮助用户编译源代码文件,并输出可执行文件。

例如,如果要编译 hello.c,可以使用以下命令:gcc hello.c -o hello此外,还有一个函数:gcc -c,它可以将源文件编译成目标文件(.o文件),而不创建可执行文件。

此外,GCC提供了一些其他的命令,可以用来优化源代码的编译效率,以及检查可执行文件的潜在错误,这些命令包括:1. gcc -Wall项:这个选项可以显示编译器产生的所有警告信息,帮助开发人员快速发现程序中的问题。

2. gcc -O项:设置优化等级,可以提高可执行文件的执行效率。

3. gcc -W项:这个选项可以检查程序中的错误,并输出可用来调试程序的相关信息。

4. gcc -S项:这个选项可以将编译好的汇编语言代码保存为文件,这有助于开发人员仔细检查所有程序文件。

以上就是 GCC译命令的基本信息。

它们一般通常在编写高级语言代码时使用,使开发人员可以将其编译为机器语言,便于程序的执行。

GCC译命令的优点之一是它们支持多种语言,这样可以让开发人员使用多种编程语言进行开发,同时还提供了一些有助于检查程序正确性的功能。

另外,GCC提供了优化等级和警告信息显示的功能,从而可以提高程序的执行效率,并减少出现错误的概率。

因此,GCC译命令不仅支持多种语言,而且具备许多实用的特性,可以为程序开发者带来更大的便利性和效率。

未来,GCC译命令将会有更多的发展,以满足开发者更高的要求。

简述gcc命令的选项

简述gcc命令的选项

简述gcc命令的选项GCC是GNU Compiler Collection的缩写,是一款开源的编译器,支持多种编程语言,包括C、C++、Objective-C、Fortran、Ada等。

GCC命令的选项非常多,可以根据不同的需求进行选择,下面将对GCC命令的选项进行简述。

1. 常用选项(1)-c:只编译不链接,生成目标文件。

(2)-o:指定输出文件名。

(3)-g:生成调试信息。

(4)-Wall:开启所有警告信息。

(5)-Werror:将警告信息视为错误。

(6)-O:优化选项,包括-O0、-O1、-O2、-O3等级别。

(7)-I:指定头文件搜索路径。

(8)-L:指定库文件搜索路径。

(9)-l:指定链接的库文件名。

2. 预处理选项(1)-E:只进行预处理,输出预处理结果。

(2)-D:定义宏。

(3)-U:取消定义宏。

(4)-I:指定头文件搜索路径。

(5)-M:输出依赖关系。

3. 编译选项(1)-S:只编译不汇编,生成汇编代码。

(2)-fPIC:生成位置无关代码。

(3)-fno-strict-aliasing:关闭严格别名规则。

(4)-fno-omit-frame-pointer:不省略函数栈帧指针。

(5)-fno-common:禁止共享数据段。

(6)-fno-builtin:禁用内建函数。

(7)-fno-stack-protector:禁用栈保护。

4. 链接选项(1)-shared:生成共享库。

(2)-static:生成静态库。

(3)-nostdlib:不使用标准库。

(4)-nodefaultlibs:不使用默认库。

(5)-Wl:传递参数给链接器。

(6)-rpath:指定运行时库搜索路径。

5. 其他选项(1)-v:显示编译器版本信息。

(2)-dumpversion:显示编译器版本号。

(3)-dumpmachine:显示编译器目标机器。

(4)-print-search-dirs:显示搜索路径。

(5)-print-libgcc-file-name:显示libgcc文件路径。

gcc的编译属性和选项

gcc的编译属性和选项

gcc的编译属性和选项1.指定内存默认对其参数:__attribute__((packed)):按⼀字节对其__attribute__((aligned(n))):从此之后默认按n字节对其例如:struct stu{ int a; char b;}__attribute__((packed));struct stu{ int a __attribute__((aligned(16))); char b;};例⼦#include <stdio.h>struct ss{char a __attribute__((aligned(16)));int b;//① __attribute__((aligned(16)));};//②__attribute__((aligned(16)));void main(){int i;printf("%d\n", sizeof(struct ss));struct ss s1 = {0x11, 0x55443322};unsigned char *p = (unsigned char *)&s1;for(i=0; i<sizeof(s1); i++){printf("0x%x\n", *(p+i));}}输出:160x110xd10x980x00x220x330x440x550xe00xfc0x980x00xf40xef0x980x0可以看出:__attribute__((aligned(16)))在哪个域后⾯修饰哪个域(注意仅对此域有效,对其它域⽆效),更改了这个域的实际对齐参数,实际对齐参数决定了此域的起始存储位置,再结合结构体的总⼤⼩必须能整除每⼀个域的最⼤对齐参数,因此可以推出来结构体的⼤⼩和内存的存储关系。

将结构体中注释掉掉的部分加上结构体⼤⼩就是32字节。

若只要③处,设定的只是结构体间对齐,结构体成员的存储顺序不变,只是结构体变长了。

gcc -include选项的用法

gcc -include选项的用法

gcc -include选项的用法标题:GCC中include选项的用法及详细解析引言:GCC是一款常用的编译器,广泛应用于各种平台和编程语言中。

在使用GCC进行编译时,include选项是非常常用的一个选项,它能够指定编译器搜索头文件的路径。

本文将详细介绍GCC中include选项的用法,并针对不同情况进行一步一步的解析,帮助读者更好地理解和应用include选项。

第一部分:include选项的基础知识1.1 include选项的作用include选项用于指定编译器搜索头文件的路径,即告诉编译器在哪里查找头文件。

1.2 include选项的格式GCC的include选项的格式为:-I <路径>,其中“-I”是一个固定的标记,后面跟上具体的路径。

第二部分:include选项的常见用法2.1 指定系统头文件路径在使用GCC编译程序时,需要使用系统提供的头文件,这些头文件通常安装在标准路径下,如/usr/include。

可以使用include选项来指定系统头文件路径,以确保编译器能够正确找到所需的头文件。

示例命令:gcc -I/usr/include program.c2.2 指定自定义头文件路径在编写程序时,有时会使用到自定义的头文件。

可以使用include选项来指定自定义头文件路径,以确保编译器能够找到这些头文件。

示例命令:gcc -I/path/to/header program.c2.3 添加多个头文件路径如果项目中使用到了多个自定义头文件路径,可以使用多个include选项来指定这些路径。

示例命令:gcc -I/path/to/header1 -I/path/to/header2 program.c2.4 使用相对路径在某些情况下,我们可能希望使用相对路径来引用头文件。

可以使用include选项结合相对路径来实现这一目的。

示例命令:gcc -I./include program.c第三部分:include选项的进阶使用3.1 使用尖括号或双引号在使用include选项时,可以选择使用尖括号(<>)或双引号("")来引用头文件。

GCC编译选项参数

GCC编译选项参数

GCC编译选项参数GCC是一种开源的编译器套件,可用于编译多种编程语言,例如C、C++、Objective-C、Fortran等。

GCC提供了许多编译选项参数,以便开发人员根据需要自定义编译过程。

以下是一些常用的GCC编译选项参数。

1. -o filename:指定输出文件的名称,例如gcc -o myprogram.c。

2.-c:仅编译源文件,生成相应的目标文件,而不进行链接操作。

3.-E:仅进行预处理,输出预处理后的源代码。

4.-S:仅进行编译,生成汇编语言代码。

5.-g:生成调试信息,以便在调试程序时使用调试器。

6. -O[level]:优化编译,提高程序执行效率。

级别有-O0(关闭优化)、-O1(开启基本优化)、-O2(开启更多优化)、-O3(开启所有优化)等。

7. -Wall:输出所有警告信息。

8. -Werror:将所有警告信息视为错误,编译过程中出现警告将中断编译。

9. -std=标准:指定使用的语言标准,例如-std=c9910. -I directory:指定头文件的路径,可以使用多个-I选项来指定多个路径。

11. -L directory:指定库文件的路径,可以使用多个-L选项来指定多个路径。

12. -l library:链接指定的库文件,例如-lm表示链接数学库。

13. -D macro:定义一个宏,可以使用-D选项定义多个宏。

14. -U macro:取消一个宏的定义。

15. -pedantic:严格按照标准执行,当代码使用了标准不允许的特性时给出警告。

16. -Werror-implicit-function-declaration:函数未声明时,将其视为错误。

17. -Wno-unused-variable:忽略未使用的变量警告。

18.-fPIC:生成位置无关代码,用于生成共享库。

19. -march=architecture:指定目标架构,例如-march=native表示使用当前机器的最佳指令集扩展。

【GCC】gcc警告选项汇总--编辑中gcc编译选项

【GCC】gcc警告选项汇总--编辑中gcc编译选项

【GCC】gcc警告选项汇总--编辑中gcc编译选项⽬录参考原⽂:https:///qq_17308321/article/details/79979514前⾔警告:不是错误的,但是有风险或表明可能有错误。

英⽂原⽂:请求或取消警告选项加上-Wall吧,gcc 默认不加参数的情况下连定义了返回值的函数没有返回值都不报错。

-Wall,-Wextra 就是加-Wall 和-Wall不启动的选项也加上()-fsyntax-only检查代码中的语法错误,但除此之外不要做任何事情。

-w (⼩写)禁⽌所有警告消息。

-W (⼤写)以“ -W ”请求特定的警告 - 可以隐式地请求隐式声明的警告。

-W和-Wall的区别-Wall选项意思是编译后显⽰所有警告。

-W选项类似-Wall,会显⽰警告,但是只显⽰编译器认为会出现错误的警告。

在编译⼀些项⽬的时候可以-W和-Wall选项⼀起使⽤。

gcc -W -Wall test_w_wall testwwall.c-Werror=将指定的警告转换为错误。

请注意,指定-Werror = foo会⾃动隐含-W foo 。

但是, -Wno-error = foo并不意味着什么。

反过来:-Wno-error取消编译选项-Werror⽤途:假设我们使⽤了⼀个⼈的代码A⽬录,⾥⾯有⼀个-Werror的选项,把所有的警告当做错误;⼜使⽤了另⼀个⼈的代码B⽬录,⾥⾯存在⼀堆Warning。

这样,当我们把它们合在⼀起编译的时候,A中的-Werror选项会导致B的代码编译不过。

但我们⼜不想去修改B的代码,怎么办?⽅法是,先add_subdirectory(A),之后,加上⼀句set(CMAK_CXX_FLAGS "${CMAK_CXX_FLAGS} -Wno-error")-Wno-这个前缀,就是⽤来取消⼀个编译选项的然后,再add_subdirectory(B)-Wfatal-errors在发⽣第⼀个错误时中⽌编译。

gcc 32位编译参数

gcc 32位编译参数

gcc 32位编译参数
gcc是一个广泛使用的编译器,用于将C、C++和其他编程语言编译成机器码。

在32位编译参数中,有许多选项可以用来优化程序的性能和可移植性。

其中一个常用的选项是"-m32",它告诉gcc将代码编译成32位的可执行文件。

这对于一些老旧的系统或者需要与特定硬件兼容的程序非常有用。

另一个常用的选项是"-O2",它告诉gcc进行中级优化。

这可以提高程序的执行速度,但也可能增加编译时间。

如果你想要更高级的优化,可以使用"-O3"选项。

这将进行更多的优化,但可能会增加编译时间和可执行文件的大小。

除了优化选项,gcc还有其他一些有用的选项。

例如,"-Wall"选项可以让gcc显示所有的警告信息,帮助你找到潜在的错误。

"-g"选项可以生成调试信息,方便你在程序出现问题时进行调试。

如果你想要使用特定的库或头文件,可以使用"-l"和"-I"选项。

例如,"-lmath"选项可以告诉gcc链接数学库,而"-I/usr/include"选项可以告诉gcc在/usr/include目录中查找头文件。

gcc的32位编译参数提供了许多选项,可以帮助你优化程序的性能和可移植性。

通过合理使用这些选项,你可以编译出高质量的32位
可执行文件。

GCC编译命令

GCC编译命令

GCC编译命令今天突然被同事问道⼀个GCC编译命令的问题,感觉对相应内容⽣疏了,赶紧整理下相关内容,梳理下相关知识。

GCC命令提供了⾮常多的命令选项,但并不是所有都要熟悉,初学时掌握⼏个常⽤的就可以了,到后⾯再慢慢学习其它选项,免得因选项太多⽽打击了学习的信⼼。

⼀. 常⽤编译命令选项假设源程序⽂件名为test.c。

1. ⽆选项编译链接⽤法:#gcc test.c作⽤:将test.c预处理、汇编、编译并链接形成可执⾏⽂件。

这⾥未指定输出⽂件,默认输出为a.ou t。

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以上两种⽅法相⽐较,第⼀中⽅法编译时需要所有⽂件重新编译,⽽第⼆种⽅法可以只重新编译修改的⽂件,未修改的⽂件不⽤重新编译。

GCC编译选项含义解析

GCC编译选项含义解析

GCC编译选项含义解析GCC 编译GCC的编译流程分为四个步骤,分别为:预处理(Pre-Processing)可以通过gcc -E -o hello.i查看中间结果编译(Compiling)汇编(Assembling)链接(Linking)gcc 命令只能编译C++源⽂件,⽽不能⾃动和C++程序使⽤的库链接。

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

1. 总体选项-c:只激活预处理、编译和汇编过程,但不做link,只⽣成⽬标⽂件-o:指定输出⽂件,未指定时,默认为a.out-S:只激活预处理和编译,⽣成.s的汇编⽂件-E:只激活预处理,需要重定向到⼀个⽂件⾥,gcc -E hello.c > pre_hello.i2. 调试选项-g:以操作系统的本地格式(stabs, COFF, XCOFF等)产⽣调试信息,以便GDB使⽤-glevel:调试信息⽣成级别,默认为2,如-g3level=1,输出少量调试信息,没有局部变量和⾏号信息level=3,输出较多调试信息3. 预处理器选项-Dmacro:相当于C语⾔中的#define macro-Dmaroc=defn:定义宏macro的内容为defn,相当于C语⾔中#define marco=defn-Umacro:取消宏macro,-U 选项在所有-D 选项之后使⽤-include file:当某个⽂件需要另⼀个⽂件时,可以⽤它来设定,功能类似#include <filename>,如gcc hello.c -include /root/ss.h4. 链接器选项-static:将禁⽌使⽤动态库-shared:指定⽣成⼀个共享⽬标⽂件,常搭配-fPIC使⽤-Wl,option:把选项option传递给链接器;如果option包含逗号,会分隔为多个选项-symbolic:建⽴共享⽬标⽂件时候,把引⽤绑定到全局符号上5. ⽬录选项-l{library]}:指定编译的时候使⽤的库,如gcc -lcurses hello.c,链接时使⽤-L{dir}:指定编译时,搜索库的路径。

gcc常用编译选项 符号表

gcc常用编译选项 符号表

GCC(GNU编译器集合)是一款功能强大的C/C++编译器,提供了许多有用的编译选项。

以下是一些常用的GCC编译选项及其符号表:1. 常用编译选项:* -E:只进行预处理,不编译。

* -S:只编译,不汇编。

* -c:只编译、汇编,不链接。

* -g:包含调试信息。

* -I dir:指定include包含文件的搜索目录。

* -o file:输出成指定文件名。

* -v:详细输出编译过程中所采用的每一个选项。

* -C:预处理时保留注释信息。

* -ggdb:在可执行文件中包含可供GDB使用的调试信息。

* -fverbose-asm:在编译成汇编语言时,把C变量的名称作为汇编语言中的注释。

* -save-temps:自动输出预处理文件、汇编文件、对象文件,编译正常进行。

* -fsyntax-only:只测试源文件语法是否正确,不会进行任何编译操作。

* -ffreestanding:编译成独立程序,而非宿主程序。

* -ansi:ANSI标准。

* -stdc99:C99标准。

* -stdgnu89:ISO/IEC 9899:1990 以及GNU扩充。

* -stdgnu99:ISO/IEC 9899:1999 以及GNU扩充。

* -trigraphs:支持ISO C三字符组。

1. 出错提示选项:* -w:忽略所有警告。

* -Werror:不区分警告和错误,遇到任何警告都停止编译。

* -Wall:开启大部分警告提示。

* -Wshadow:某语句块作用域变量与更大作用域的另一变量同名时发出警告(此警告未包含在-Wall选项中,需单独开启)。

* -Wextra:对所有合法但值得怀疑的表达式发出警告。

1. 优化选项:* -O0:关闭所有优化选项。

* -O1:第一级别优化,使用此选项可使可执行文件更小、运行更快,并不会增加太多编译时间,可以简写为-O。

* -O2:第二级别优化,采用了几乎所有的优化技术,使用此选项。

linux gcc编译命令

linux gcc编译命令

linux gcc编译命令
GCC是 Linux系统下的一个很常用的开源编译器。

使用GCC编译
C/C++程序,大致需要按以下步骤进行:
1、准备工作:确定要编译的程序源码文件,源码文件通常以 .c
或 .cpp结尾。

2、编译阶段:使用GCC命令进行编译,编译完成后生成目标文件,
比如 a.out 或者带有其它后缀的文件名。

3、链接阶段:使用GCC将目标文件与静态库链接在一起,最终生成
可执行文件。

4、执行文件:使用./<文件名>命令运行可执行文件,查看其执行结果。

常用的GCC编译命令为:
1、gcc [选项参数] 源文件名 -o<输出文件名>,该命令可以进行编译,默认输出文件名为 a.out 。

2、gcc [选项参数] 源文件名 -c,该命令仅进行编译,不进行链接,源文件编译生成 .o 格式的文件。

3、gcc [选项参数] 源文件名 -S,该命令仅进行编译,不进行汇编,源文件编译生成 .s 格式的文件。

4、gcc [选项参数] 汇编文件名 -c,该命令进行汇编并编译,汇编
文件编译生成 .o 格式的文件。

5、gcc [选项参数] 目标文件名 -o<输出文件名>,该命令可以链接多个 .o 格式的文件,最终生成可执行文件。

6、gcc [选项参数] 动态库文件名 -shared -o<输出文件名>,该命令将多个 .o 格式的文件链接成动态库,最终生成动态库文件。

7、g++[选项参数]源文件名-o<。

gcc编译选项手册

gcc编译选项手册

gcc编译选项手册
GCC是一款功能强大的开源编译器,提供了许多编译选项来控
制编译过程和生成的代码。

以下是一些常用的编译选项手册:
1. `-o <output>`: 指定生成的可执行文件的名称。

2. `-c`: 生成目标文件但不进行链接,通常用于生成中间文件。

3. `-g`: 生成调试信息,方便调试程序。

4. `-Wall`: 开启所有警告信息,帮助发现潜在的问题。

5. `-O`: 启用优化,包括`-O0`(无优化)、`-O1`(基本优化)、`-O2`(更多优化)和`-O3`(最大优化)。

6. `-I <path>`: 添加包含文件的搜索路径。

7. `-L <path>`: 添加库文件的搜索路径。

8. `-l<library>`: 指定链接时需要的库文件。

9. `-D<macro>`: 定义一个预处理宏。

10. `-std=<standard>`: 指定使用的语言标准,如`-std=c11`表示使用C11标准。

除了上述常用的编译选项外,GCC还提供了许多其他选项,用于控制优化、调试信息、代码生成等方面的细节。

通过查阅GCC官方文档或者在命令行下输入`gcc --help`可以获取完整的编译选项手册。

总的来说,GCC编译选项提供了丰富的功能,能够帮助开发者控制编译和链接过程中的各个细节,从而生成高质量的目标文件和可执行文件。

对于不同的项目和需求,合理选择和使用编译选项是非常重要的。

gcc常用的编译选项

gcc常用的编译选项

gcc常⽤的编译选项⼀、程序编译过程程序编译的时候,要分四个阶段:1、预处理阶段,完成宏定义和include⽂件展开等⼯作;2、根据编译参数进⾏不同程度的优化,编译成汇编代码;3、⽤汇编器把汇编代码进⼀步⽣成⽬标代码;4、⽤连接器把⽣成的⽬标代码和系统或⽤户提供的库连接起来,⽣成可执⾏⽂件;⼆、gcc/g++的编译过程1.预处理,不⽣成⽂件[预处理器cpp]2.将预处理后的⽂件转换成汇编语⾔,⽣成.s的⽂件[编译器egcs]3.由汇编变为⽬标代码(机器代码)⽣成.o的⽂件[汇编器as]4.连接⽬标代码,⽣成可执⾏程序[链接器ld]三、gcc常⽤编译选项-E 只运⾏C预编译器cpp,不⽣成⽂件-S 只把⽂件编译成为汇编代码-c 只⽣成object⽂件,不链接-o ⽣成指定的输出⽂件-g ⽣成可被gdb使⽤的标准调试信息-IDIR 指定额外的头⽂件搜索路径DIR-LDIR 指定额外的库函数搜索路径DIR-lLIBRARY 指定链接时需要的其它函数库“LIBRARY-w 不⽣成任何警告信息-Wall ⽣成所有级别的警告信息-shared ⽣成⽀持动态共享库的执⾏⽂件-static 不⽀持动态共享库,把函数库内容静态链接到可执⾏程序中-O0 不进⾏代码优化处理-O,O1 进⾏⼀般优化,减少⼤⼩和时间-O2 进⼀步优化,⼀般在内核编译时使⽤-O3 较-O2进⼀步优化四、arm-linux-gcc常⽤编译选项arm-linux-gccarm-linux-objdump–D 显⽰所有段的汇编内容 -d 显⽰可执⾏段的汇编内容 –m arm。

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

Linux中gcc,g++常用编译选项-x language filename设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定,C语言的后缀名称是.c的,而C++的后缀名是.C或者.cpp,如果你很个性,决定你的C代码文件的后缀名是. pig 哈哈,那你就要用这个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数的使用。

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

例子用法: cd..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在你是用#i nclude"file"的时候,gcc/g++会先在当前目录查找你所制定的头文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他回先在你所制定的目录查找,然后再按常规的顺序去找.对于#i nclude<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语言特性下面简单的运用:我们在文本编辑器里写一个C的简单的程序(好像所有学习C或者C++的书都会出现)代码:#include <stdio.h>int main(){printf("Hello,World!\n");return 0;}现在存盘为Hello.c,打开你的终端,并在文件当前目录输入:gcc Hello.c -o hello编译时可能会出现如下警告:no newline at and of file ,只有在文件结尾添加一个新行就好了。

然后在终端中输入./hello ,你就能在终端中看到程序运行结果了。

下面来说下C++是如何编译的代码:#include <iostream>using namespace std;int main(){cout<<"Hello,World!\n"<<endl;return 0;}存盘为Hello.cpp使用gcc编译???不对,这里我们使用g++来编译C++程序g++ Hello.cpp -o hello编译多个文件我们怎么办???来看下面出了三个文件Hello.h, Hello.cpp, MyFirst.cpp代码://file_NO1:Hello.hclass Hello{public:Hello();void Display();};//file_NO2:Hello.cpp#include <iostream>#include "Hello.h"using namespace std;Hello::Hello(){}void Hello::Display(){cout<<"Hello,World!\n"<<endl;}//file_NO3:MyFirst.cpp#include <iostram>#include "Hello.cpp"int main(){Hello theHello;theHello.Display();return 0;}在g++中有一个参数-c 可以只编译不连接,那么我们就可以按如下顺序编译文件,代码:g++ -c Hello.cpp -o Hello.og++ -c MyFirst.cpp -o MyFirst.og++ MyFirst.o hello.o -o MyFirst你是否会问,如果是一个项目的话,可能会有上百个文件,这样的编译法,人不是要累死在电脑前吗,或者等到你编译成功了,岂不是头发都白了,呵呵,所以我们要把上述的编译过程写进以下一个文本文件中:Linux下称之为makefile#这里可以写一些文件的说明MyFirst: MyFirst.o hello.og++ MyFirst.o hello.o -o MyFirstHello.o:Hello.cppg++ -c Hello.cpp -o Hello.oMyFirst.o:MyFirst.cppg++ -c MyFirst.cpp -o MyFirst.omakefile 编写规则:(1)以“#”开始的行为注释(2)文件依赖关系为:target:componentsrule存盘为MyFirst,在终端输入:make MyFist ,程序出现了错误可是所有程序员共同的敌人,在编写程序时我们应该尽量的去避免错误的出现,不过编写的时候再怎么都不可避免的出现这样那样的错误,对程序进行必要的调试是一个好主意,那我们怎么来调试程序呢,看下面:gdb ./文件名////////////////在这里我修改下要想下面可以调试,在上面编译的时候必须加上参数g,g++ -g hello.cpp -o hello以下为调试状态下的可以用到的命令(可以仅输入单词的输入,如break可简为b),尖括号中为说明list <显示源代码>break 行号<设置断点>run <运行程序>continue <继续从断点处执行>print 变量<调试时查看变量的值>del 行号<删除断点>step <单步执行,可跟踪到函数内部>next <单步执行,不可跟踪到函数内部>quit <退出>makefile 的编写不是件容易的事情,因为自己写的makefile可能不能在所有的unix/linux类操作系统下通用。

相关文档
最新文档