• gcc常用编译选项


           -c  表示仅仅汇编及编译代码,不进行链接,也就是将源代码编译成 .o 文件

           -o  指定输出文件的文件名

           -g  调试信息生成,不跟数字默认为-g2,-g1是基本信息的加入,-g3连宏信息都附加进去,附加调试信息显著增加ELF文件大小,但不会影响生成代码的大小

           -s  符号表删除

           -w  关闭所有警

           -D  定义宏,如:gcc –D_DEBUG = 1 -c xxx.c -o xxx

           -E  只进行预处理,不汇编

           -I  将指定路径添加到include的搜索路径

           -S  只进行编译,不汇编

           -O  优化选项,后面跟数字表示优化级别,-O0表示不优化,-O1、-O2、-O3优化程度依次递增

           -Wall  打开所有的编译告警(实际上只打开大部分,部分要单独开启)

           -Werror  将所有的编译告警转化为编译错误,只要有告警就停止编译

           -include  在源文件前面含指定的头文件

           -fstack-protector  堆栈保护,仅为局部变量中包含长度不小于8 byte的char数组的函数插入保护代码

           -fstack-protector-all  为所有的(以下)局部变量插入保护代码:局部变量的地址作为赋值语句的右值或函数参数、局部变量包含数组类型的局部变量(不管数组长度)、带register声明的局部变量

           -D_FORTIFY_SOURCE  gcc编译器和glibc库配合,协同提供在编译时和运行时对固定大小的(动态分配和静态声明)缓冲区的访问检查,该选项能提供编译时和运行时的双重检查保护,建议和-O2一起使用:-D_FORTIFY_SOURCE=2 –O2

           -Wformat  检查printf、scanf等函数调用,以确保提供的参数格式字符串合法有效,不合法则告警

           -fPIC –fpic  Position-independent Code 为共享库产生位置无关代码

           -fPIE –fpie  Position-independent Code为可执行文件提供产生位置无关代码

           -Wl,-z,now  共享库或程序在加载完成后立即进行符号绑定,一般与-Wl,-z,relro一起使用(完全开启relro)

           -Wl,-z,relro  全局偏移表GOT只读(部分开启relro)

           -ftrapv  检测加、减、乘三种运算的运行时溢出,并在溢出时触发SIGABRT

           -Wl,-z,noexecstack  告知编译器在生成目标文件时,将特定的内存区域(数据段以及堆栈段)标记为不可执行的,这个信息记录在ELF文件的GNU_STACK程序头,内核根据该信息来判定一个进程是否在堆栈及数据段可执行代码。

           -Wextra  打印额外的一些告警信息

  • 相关阅读:
    django通用视图(类方法)
    学期总结
    计算机网络复习
    面试总结二
    电话面试总结
    Linux用户管理-中
    Linux之用户管理--初级上
    web聊天室总结
    聊一聊JQ中delegate事件委托的好处
    git的使用[转]
  • 原文地址:https://www.cnblogs.com/tongyishu/p/13176975.html
Copyright © 2020-2023  润新知