设为首页 加入收藏

TOP

UBOOT编译--- UBOOT的编译和链接选项详解(六)(五)
2023-07-23 13:30:30 】 浏览:135
Tags:UBOOT 编译 --- 项详解
况下进行旧式函数定义);
[3] -Wformat、-Wformat=n、-Wformat-security:Wformat、-Wformat=n:检查对 printf 和 scanf 等的调用,以确保提供的参数具有适合指定格式字符串的类型,并且格式字符串中指定的转换是有意义的。这包括 printf、scanf、strftime 和 strfmon(X/Open 扩展,不在 C 标准中)系列(或其他特定于目标的系列)中的标准函数和其他由格式属性(请参阅函数属性)指定的函数。在没有指定格式属性的情况下检查哪些函数取决于所选的标准版本,并且对没有指定属性的函数的这种检查被 -ffreestanding 或 -fno-builtin 禁用;-Wformat-security:如果指定了“-Wformat”,还会警告使用表示可能的安全问题的格式函数。目前,这会警告调用 printf 和 scanf 函数,其中格式字符串不是字符串文字并且没有格式参数,如 printf (foo);
[4] -Wformat-nonliteral、-Wno-format-nonliteral :如果指定了 -Wformat,如果格式字符串不是字符串文字并且因此无法检查,也会发出警告,除非格式函数将其格式参数作为 va_list;
[5] -fno-builtin、-fno-builtin-function:不识别不以“builtin”作为前缀的内置函数。;
[6] -ffreestanding:编译输出(可执行文件)是运行在一个 freestanding environment 环境下。这个选项 包含 -fno-builtin 选项。等同于 -fno-hosted;
[7] -O -O0 -O1 -O2 -O3 -Os -Ofast -Og -Oz:-Os相当于-O2.5。是使用了所有-O2的优化选项,但又不缩减代码尺寸的方法;
[8] -fstack-protector、-fno-stack-protector、-fstack-protector-all:-fstack-protector:启用堆栈保护,不过只为局部变量中含有 char 数组的函数插入保护代码;-fstack-protector-all:启用堆栈保护,为所有函数插入保护代码;-fno-stack-protector:禁用堆栈保护。GCC中的堆栈保护机制
[9] -fdelete-null-pointer-checks/-fno-delete-null-pointer-checks:delete-null-pointer-checks是一种优化手段,通过全局的数据流分析来识别和删除所有对空指针的检测操作;编译器假定对空指针的解引用会造成程序终止。但因为有些环境下,这一结论并不一定成立,而O2,O3和Os时会开启此优化。因此GCC增加了选项-fno-delete-null-pointer-checks;
[10] -g:告诉gcc生成并嵌入调试信息;
[11] -fstack-usage:为每一个函数输出栈使用信息,每一个源码文件生成一个.su (Stack Usage)文件, su文件中有每一个函数的栈使用信息;
[12] -Wstack-usage=byte-size:如果函数的堆栈使用量可能超过字节大小,则发出警告。;
[13] -Wdate-time:当遇到宏__TIME
_、 宏__DATE__ 、 宏__TIMESTAMP__时发出警告;
[14] -Werror=date-time:将指定的警告变成错误;
[15] -fpic、-FPIC、-fpie、-fPIE相同点:都是为了在动态库中生成位置无关的代码。通过全局偏移表(GOT)访问所有常量地址。程序启动时动态加载程序解析GOT条目。不同点:如果链接的可执行文件的GOT大小超过计算机特定的最大大小,则会从链接器收到错误消息,指示-fpic不起作用;在这种情况下,请使用-fPIC重新编译。GOT大小根据操作系统的不同而大小不一样,SPARC上为8k,在AArch64上为28k,在m68k和RS / 6000上为32k。x86没有此限制;-fpie、-fPIE这些选项类似于 -fpic 和 -fPIC,但生成的与位置无关的代码只能链接到可执行文件中。 通常这些选项用于编译将使用 -pie GCC 选项链接的代码。-fpie 和 -fPIE 都定义了宏 piePIE。 宏的 -fpie 值为 1,-fPIE 值为 2。-fno-pic :生产位置有关代码。
[16] -ffixed-reg:生成的代码不要用寄存器r9,uboot中用来指另做它用;
[17] -ffunction-sections、-fdata-sections:在链接生成最终可执行文件时,如果带有-Wl,--gc-sections参数,并且之前编译目标文件时带有-ffunction-sections、-fdata-sections参数,则链接器ld不会链接未使用的函数,从而减小可执行文件大小;
[18] -fshort-wchar:强制将wchar_t指定成两个字节,使用这个字段常常是因为wchar_t类型在Windows和Linux平台下字节大小的不同,但这样做只会改变代码中实现的部分,而内部库或者是第三方库中用到的接口和函数都是没有变的,仍然采用的是4字节编码
[19] --gc-sections -gc-sections:同上
[20] -fcommon、-fno-common: 指定编译器将未初始化的全局变量放在对象文件的BSS部分。
[21] -mthumb、-marm、-mthumb-interwork、-mno-thumb-interwork:-marm 和-mthumb用来执行生成的代码在arm模式还是thumb模式执行,-mno-thumb-interwork 是指没有ARM/Thumb之间的切换
[22] -mword-relocations:由于使用pic时movt / movw指令会硬编码16bit的地址域,而uboot的relocation并不支持这个, 所以arm平台使用mword-relocations来生成位置无关代码
[23] -mabi=name:这些' -m '选项是为ARM端口定义的,为指定的ABI(Application Binary Interface)生成代码。允许的值是:' apcs-gnu ',' atpcs ', ' aapcs ', ' aapcs-linux '和' iwmmxt '。
[24] -mstrict-align、-mno-strict-align:是否允许非对齐访问;
[25] -finstrument-functions:生成函数的进入和退出的检测调用;
[26] -pipe:编译的各个阶段之间使用管道而不是临时文件进行通信。这在汇编程序无法从管道读取数据的某些系统上无法工作;但是GNU汇编器没有问题;
[27] -march=name:指定目标架构的名称,以及一个或多个可选的特性修饰符;
[28] -mgeneral-regs-only:生成只使用通用寄存器的代码。这将防止编译器使用浮点寄存器和高级SIMD寄存器,但不会对汇编程序施加任何限制;
[29] -Bdynamic、-Bstatic:-Bdynamic and -Bstatic这两个选项是position-dependent选项,影响后面命令行出现的-lname。-Bdy
首页 上一页 2 3 4 5 下一页 尾页 5/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇痞子衡嵌入式:对比恩智浦全系列M.. 下一篇UBOOT编译--- UBOOT编译过程目标..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目