gcc编译选项分析

合集下载

GCC编译器中和ARM体系结构相关的选项解释

GCC编译器中和ARM体系结构相关的选项解释

GCC编译器中和ARM体系结构相关的选项解释GCC编译器是一款功能强大的开源编译器,可用于编译多种编程语言,包括C、C++、Objective-C和Fortran等。

GCC支持多种体系结构,其中包括ARM体系结构。

本文将解释GCC编译器中与ARM体系结构相关的选项。

1. -march=arch这个选项用于指定目标ARM处理器的体系结构版本。

arch参数可以是ARMv4、ARMv4T、ARMv5、ARMv5T、ARMv5TE、ARMv5TEJ、ARMv6、ARMv6K、ARMv6Z、ARMv6KZ、ARMv6T2、ARMv7、ARMv7A、ARMv7R或ARMv7M。

不同的版本对ARM处理器的特性和指令集有不同的要求和支持,因此正确指定arch参数对于生成高效的机器码非常重要。

2. -mfloat-abi=abi这个选项用于指定用于处理浮点数的ABI(Application Binary Interface)。

abi参数可以是soft、softfp或hard。

soft ABI不使用浮点寄存器,而是通过软件库来进行浮点运算。

softfp ABI在软浮点运算时使用浮点寄存器,但函数参数和返回值通过通用寄存器来传递。

hard ABI使用浮点寄存器来传递函数参数和返回值,并利用硬件浮点加速浮点运算。

选择合适的ABI对于提高程序的浮点运算性能非常重要。

3. -mfpu=fpu这个选项用于指定要使用的浮点单元。

fpu参数可以是none、auto、vfp或neon。

none表示不使用浮点单元,将所有浮点运算转为软件模拟。

auto表示自动选择浮点单元,默认情况下会选择具有最高级别的浮点单元。

vfp表示使用VFP浮点单元,这是一种常见的浮点单元,支持单精度和双精度浮点数运算。

neon表示使用NEON浮点单元,这是一种更高级别的浮点单元,支持单精度和双精度浮点数运算以及SIMD指令。

4. -mthumb这个选项用于指定生成Thumb指令集的机器码。

GCC的几个重要选项解释

GCC的几个重要选项解释

GCC的几个重要选项解释GCC的几个重要选项解释详细可见:[GNU Compiler Collection (GCC)]Option-Summary.html-c 编译或者汇编代码,但是不链接-S 在编译之后停止,但不汇编-E 预处理后停止,但不编译-o 指定输出文件的名称-v 显示编译的每个阶段使用的命令-std 指定要用的语言标准-g 产生调试信息-pg 产生额外信息,被gprof用来做profilling-O 优化可执行代码-W 设置编译器的警报级别-pedantic以ANSI/ISO C标准列出的所有警告,不符合该语言标准的地方将产生相应的警告信息-I 指定文件包含的目录-L 指定库目录(编译时的库搜索目录)-D 预定义在源代码中出现的宏-U 取消所有定义的宏-f 指定用来控制编译器行为的选项-m 指定与硬件相关的选项GCC相关信息查看-help 显示此帮助说明-target-help 显示目标机器特定的命令行选项-help={target|optimizers|warnings|params|[^]{joined|separate|un documented}}[,...]显示特定类型的命令行选项(使用‘-v --help’显示子进程的命令行参数)-version 显示编译器版本信息-dumpspecs 显示所有内建 spec 字符串-dumpversion 显示编译器的版本号-dumpmachine 显示编译器的目标处理器-print-search-dirs 显示编译器的搜索路径-print-libgcc-file-name 显示编译器伴随库的名称-print-file-name=<库> 显示 <库> 的完整路径-print-prog-name=<程序> 显示编译器组件 <程序> 的完整路径-print-multi-directory 显示不同版本 libgcc 的根目录-print-multi-lib 显示命令行选项和多个版本库搜索路径间的映射-print-multi-os-directory 显示操作系统库的相对路径-print-sysroot 显示目标库目录-print-sysroot-headers-suffix 显示用于寻找头文件的sysroot 后缀目前了解的GCC相关具体选项-fpic用于生成位置无关代码,位置无关码的作用:1、程序在运行期间动态加载到内存中;2、程序在不同场合与不同程序组合后加载到内存(一般用于动态链接库)3、在运行期间不同地址相互之间的映射;(如bootloader)简言之,位置无关码就是可以在进程的任意内存位置执行的目标码,动态链接库必须使用。

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编译lib

gcc编译lib

GCC编译lib简介GCC(GNU Compiler Collection)是一个开源的编程语言编译器集合,它支持多种编程语言,包括C、C++、Java、Fortran等。

在开发过程中,我们经常会使用GCC 来编译源代码,生成可执行文件。

除了编译应用程序,GCC还可以用于编译库文件(lib),供其他程序调用和链接。

本文将介绍如何使用GCC编译lib,包括编译选项的设置、库文件的生成和使用方法等。

编译选项编译lib时,我们可以根据需求设置不同的编译选项,以控制编译过程和生成的库文件的属性。

常用的编译选项有:•-c:仅编译源文件,生成目标文件(.o文件),不进行链接操作。

•-o:指定生成的目标文件名或库文件名。

•-g:生成调试信息,方便调试程序。

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

•-O:优化选项,可选取值为0、1、2、3,数字越大优化级别越高。

•-shared:生成共享库文件(动态链接库)。

•-static:生成静态库文件。

可以根据实际需要选择适合的编译选项。

编译库文件编译库文件需要分为静态库和动态库两种情况进行说明。

静态库静态库是在链接时被完整地复制到可执行文件中的库文件。

使用静态库的优点是可执行文件独立于系统环境,可以在没有安装库文件的系统上运行,但可执行文件的体积较大。

编译静态库的步骤如下:1.编写源代码文件(例如example.c):#include <stdio.h>void hello() {printf("Hello, World!\n");}2.使用GCC编译源代码文件,生成目标文件(.o文件):gcc -c example.c -o example.o3.使用GCC将目标文件打包成静态库文件(.a文件):ar rcs libexample.a example.o其中,ar命令用于创建、修改和提取静态库文件,rcs选项分别表示创建库文件、添加目标文件和生成索引。

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 -fPIC编译选项分析

gcc -fPIC编译选项分析

gcc -fPIC编译选项分析1、-fPIC 作用于编译阶段,在编译动态库时(.so文件)告诉编译器产生与位置无关代码(Position-Independent Code),若未指定-fPIC选项编译.so文件,则在加载动态库时需进行重定向。

2、64位编译器下编译生成动态库时,出现以下错误:/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-li nux/bin/ld: ../../CI/script/server/lib/libz.a(adler32.o): relocation R_X86_64_32 against `.text' can not be used when making a shared object; recompile with -fPIC../../CI/script/server/lib/libz.a: could not read symbols: Bad value原因:提示说需要-fPIC编译,然后在链接动态库的地方加上-fPIC的参数编译结果还是报错,需要把共享库所用到的所有静态库都采用-fPIC编译一遍,才可以成功的在64位环境下编译出动态库。

3、为何在32位的编译器下编译,就不会报错呢?对于我们的32位环境来说, 编译时是否加上-fPIC, 都不会对链接产生影响, 只是一份代码的在内存中有几个副本的问题(而且对于静态库而言结果都是一样的).但在64位的环境下装载时重定位的方式存在一个问题就是在我们的64位环境下用来进行位置偏移定位的cpu指令只支持32位的偏移, 但实际中位置的偏移是完全可能超过64位的,所以在这种情况下编译器要求用户必须采用fPIC的方式进行编译的程序才可以在共享库中使用。

简述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是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常用的编译选项

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。

gcc参数详解

gcc参数详解

gcc参数详解GCC是一款广泛使用的编译器,它是GNU编译器套件(GNU Compiler Collection)的一部分。

GCC是一个功能强大且灵活的编译器,特别适用于C、C++和其他编程语言的开发。

下面是对一些常用的GCC参数进行详细讲解:1. -o <filename>:用于指定输出文件的名称。

例如,使用"-o myprogram"将生成名为"myprogram"的可执行文件。

2. -c:表示将源代码编译成目标文件,而不进行链接操作。

这对于分阶段编译和构建大型工程非常有用。

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

在编译和链接过程中,使用-g参数可以在生成的可执行文件中包含用于调试的符号表和调试信息。

这些信息对于调试和追踪代码错误非常有帮助。

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

使用-Wall参数可以启用所有警告选项,帮助开发人员发现潜在的问题和错误。

5. -Werror:将所有警告视为错误。

通过使用-Werror参数,所有警告将被视为编译错误,进而阻止生成可执行文件。

6. -O<level>:进行优化处理。

GCC提供了多个级别的优化选项,例如-O0表示不进行优化,-O1表示基本优化,-O2表示更高级别的优化,-O3表示最高级别的优化。

使用优化选项可以提高程序的性能和执行速度。

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

使用-I参数可以指定需要搜索的额外头文件目录,这在项目中包含多个目录结构时非常有用。

8. -L <directory>:添加库文件搜索路径。

使用-L参数可以指定额外的库文件搜索路径,这对于链接外部库非常有用。

9. -l<library>:链接外部库文件。

使用-l参数可以链接指定的库文件,其中库文件名称可以省略前缀"lib"和文件扩展名,例如-lm表示链接数学库。

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 g++ 编译选项

gcc  g++ 编译选项

gcc / g++ 编译选项-c生成obj的.o文件,不生成可执行文件只预处理,编译和汇编,不链接。

例子:gcc -c hello.cpp他将生成.o的obj文件-g编译时,产生调试信息可以用于gdb-o生成可执行文件,指定可执行文件名。

如果没有,默认为a.out例子:g++ -o hello hello.cpp-Wall显示所有的Warning-pg可以生成gprof调试的文件-Dmacro相当于C语言中的#define macro-Dmacro=defn相当于C语言中的#define macro=defn-Umacro相当于C语言中的#undef macro-undef取消对任何非标准宏的定义-IDir增加编译时搜寻头文件的路径-llibrary指定编译的时候使用的库例子:gcc -lcurses hello.c使用ncurses库编译程序-Ldir增加编译时搜索库的路径。

-M生成文件关联的信息。

包含目标文件所依赖的所有源代码。

例子:g++ -M hello.cpp-MM和上面的那个类似,但是忽略由#include<file>造成的依赖关系。

-Olevel编译器优化级别。

-O0表示没有优化,-O3优化级别最高-static此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么动态连接库,就可以运行.-shared此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库。

GCC -o 优化选项说明

GCC -o 优化选项说明

GCC编译器优化选项分析及具体优化了什么收藏起因:目前项目使用nios IDE作为开发平台,其使用的编译器为gcc的交叉编译器。

在设定编译条件时,在debug模式下生成的程序正常,但是在release模式下会出现LCD显示的开端显示不全,缺少一个字节或字的状况。

为了了解具体为什么造成该问题,对两种模式下的配置做了对比,编译器皆为nios2-elf-gcc交叉编译器,debug模式编译器参数为:-DALT_DEBUG -O0 -g –Wall。

release模式编译器参数为: -DALT_RELEASE -O2 -g –Wall。

两种模式下的参数简单说明如下-DALT_DEBUG:目前没有明确资料显示该项的具体作用,根据命名可认为与调试有关选项。

且两种模式下都有,暂时认为不会造成差异。

-O0: gcc编译器默认优化等级。

-g:gdb调试器支持选项用于在编译时生成相关调试信息。

-Wall:打开所有编译器告警选项,即编译器最严格告警模式。

-O2:gcc编译高于O0低于O3的编译优化选项。

通过对比可以发现两种模式主要的不同在于编译器优化程度不同,那么编译器在两种优化下究竟做了什么优化那?是否由这些问题造成的显示丢失问题那??现在我们来看看gcc编译器的优化参数到底做了什么优化。

(注:由于关于nios2-elf-gcc的文档资料十分稀少,不能形成可分析的文档,所以以通用的gcc作为分析,毕竟同出一源)正文:GCC编译器优化选项介绍:GCC编译器在目前是不是用最多的编译器也相去不远,尤其在嵌入式领域很多编译器都是基于GCC的cross gcc版本。

毕竟功能成熟而且有开放的源代码。

这里只介绍优化编译的参数-O用来开启优化编译选项。

-O0:默认模式,不做任何优化。

-O1:优化。

该模式下对于一个大的函数或功能会花费更多的时间和内存。

在-O1下:编译会尝试减少代码体积和代码运行时间。

但是并不执行会花费大量时间的优化操作。

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(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:第二级别优化,采用了几乎所有的优化技术,使用此选项。

GCC编译详解

GCC编译详解

GCC编译详解GNU CC(简称为Gcc)是GNU项⽬中符合ANSI C标准的编译系统,能够编译⽤C、C++和Object C等语⾔编写的程序。

Gcc不仅功能强⼤,⽽且可以编译如C、C++、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语⾔,⽽且Gcc⼜是⼀个交叉平台编译器,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌⼊式领域的开发编译。

本章中的⽰例,除⾮特别注明,否则均采⽤Gcc版本为4.0.0。

GCC⼊门基础表3.6 Gcc所⽀持后缀名解释后缀名所对应的语⾔后缀名所对应的语⾔.c C原始程序.s/.S汇编语⾔原始程序.C/.cc/.cxx C++原始程序.h预处理⽂件(头⽂件).m Objective-C原始程序.o⽬标⽂件.i已经过预处理的C原始程序.a/.so编译后的库⽂件.ii已经过预处理的C++原始程序如本章开头提到的,Gcc的编译流程分为了四个步骤,分别为:· 预处理(Pre-Processing)· 编译(Compiling)· 汇编(Assembling)· 链接(Linking)下⾯就具体来查看⼀下Gcc是如何完成四个步骤的。

⾸先,有以下hello.c源代码#include<stdio.h>int main(){printf("Hello! This is our embedded world!n");return 0;}(1)预处理阶段在该阶段,编译器将上述代码中的stdio.h编译进来,并且⽤户可以使⽤Gcc的选项”-E”进⾏查看,该选项的作⽤是让Gcc在预处理结束后停⽌编译过程。

注意Gcc指令的⼀般格式为:Gcc [选项] 要编译的⽂件 [选项] [⽬标⽂件]其中,⽬标⽂件可缺省,Gcc默认⽣成可执⾏的⽂件,命为:编译⽂件.out[root@localhost Gcc]# Gcc –E hello.c –o hello.i在此处,选项”-o”是指⽬标⽂件,由表3.6可知,”.i”⽂件为已经过预处理的C原始程序。

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

小知识
可以看出,该选项并没有发现”long long”这个无效数据类型的错误。

∙“-pedantic”
允许发出ANSI C标准所列的全部警告信息,同样也保证所有没有警告的程序都是符合ANSI C标准的。

其运行结果如下所示:
[root@localhost Gcc]# Gcc –pedantic warning.c –o warning
warning.c: 在函数“main”中:
warning.c:5 警告:ISO C90不支持“long long”
warning.c:7 警告:在无返回值的函数中,“return”带返回值
warning.c:4 警告:“main”的返回类型不是“int”
可以看出,使用该选项查看出了”long long”这个无效数据类型的错误。

∙“-Wall”
允许发出Gcc能够提供的所有有用的报警信息。

该选项的运行结果如下所示:[root@localhost Gcc]# Gcc –Wall warning.c –o warning
warning.c:4 警告:“main”的返回类型不是“int”
warning.c: 在函数”main”中:
warning.c:7 警告:在无返回值的函数中,”return”带返回值
warning.c:5 警告:未使用的变量“tmp”
使用“-Wall”选项找出了未使用的变量tmp,但它并没有找出无效数据类型的错误。

另外,Gcc还可以利用选项对单独的常见错误分别指定警告,有关具体选项的含义感兴趣的读者可以查看Gcc手册进行学习。

(3)优化选项。

相关文档
最新文档