基本格式:gcc [options] file1 file2... //若不加入参数,则按默认参数依次执行编译、汇编和链接操作,生成的可执行文件名为 a.out
常用参数:-E //只执行预处理操作
     -S //只执行到编译操作完成,不进行汇编操作,生成的是汇编文件(.s 或 .asm),内容为汇编语言
     -c //执行编译和汇编,但不进行链接,即只生成可重定位目标文件(.o),为二进制文件,不生成完整的可执行文件
     -o filename //将操作后的内容输出到filename指定的文件中
     -static //对于支持动态链接的系统,使用静态链接而不是动态链接进行链接操作
     -g          //编译时生成debug有关的程序信息(供gdb使用)
     --save-temps //生成编译过程的中间结果文件(包括预处理文件(x.ii)、汇编代码(x.s)、目标文件(x.o)和最终的可执行文件)      -I PATH //在PATH指定的目录下寻找相关的include文件,参数中间不加空格
     -lxx //其中xx为指定函数库,对于Linux环境下的函数库,静态库后缀为.a,动态库后缀为.so,一般库名为libxx.a或libxx.so,如加入libm.so库,则使用参数-lm(去除lib和后缀.a\so)
     -L PATH //在PATH指定的目录下寻找相关的库文件,即-lxx指定待链接的库,-L指定寻找该库的路径。不指定时搜索默认的库函数路径。
     -std=xx //指定编译使用的语言标准
     -x language //指定待编译文件的语言,而不是由编译器根据文件后缀自行判断。即默认情况下gcc根据文件后缀判断使用的编程语言。例如使用文件名hello作为源文件名是不合适的,应使用hello.c
     
     -Wall //输出一些简单的错误以及一些可能存在问题的警告
     -Wextra //输出-Wall不包含的警告等
     -Werror //将警告视为错误输出
  
     -Wl,option          //通过该选项将参数 option 作为后续链接器 ld 使用的参数
     -Wl,rpath=/path/to/lib  //为链接器指定一个非默认的运行时库的搜索路径,运行采用了该选项编译的程序时,链接器会在-rpath 指定的目录中搜索所需的 so 库文件,以将其载入内存中
   
     -D name=definition //加入宏定义,若不指定def,则默认为1
     -O1、-O2       //规定编译器的优化等级,优化级数越高执行效率一般越好,但是优化会改变原有程序结构,使得其汇编不易理解      //一些进行缓冲区溢出实验时可能需要的选项
     -fstack-protector\-fno-stack-protector  //是否开启堆栈保护,这里的保护是在返回地址之前加入一个验证值来确保返回地址不被破坏
     -z execstack                  //启用可执行栈,默认是禁用的
     //(echo 0 >/proc/sys/kernel/randomize_va_space 关闭地址随机化,这是一个单独的命令,操作需要root权限)

转自https://www.cnblogs.com/yhjoker/p/7533438.html

Linux 编译命令参数的更多相关文章

  1. linux mount命令参数及用法详解

    linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...

  2. 【转】linux expr命令参数及用法详解

    在抓包过程中,查看某个设定时间内,数据上下行多少,用命令expr 计算! --------------------------------------------------------------- ...

  3. linux dmesg命令参数及用法详解(linux显示开机信息命令)

    linux dmesg命令参数及用法详解(linux显示开机信息命令) http://blog.csdn.net/zhongyhc/article/details/8909905 功能说明:显示开机信 ...

  4. linux sed命令参数及用法详解

    linux sed命令参数及用法详解 http://blog.csdn.net/namecyf/article/details/7336308 1. Sed简介 sed 是一种在线编辑器,它一次处理一 ...

  5. Linux mail 命令参数

    linux mail 命令参数: 使用mail发邮件时,必须先将sendmail服务启动. mail –s “邮件主题” –c”抄送地址” –b “密送地址” -- -f 发送人邮件地址 –F 发件人 ...

  6. linux dd命令参数及用法详解---用指定大小的块拷贝一个文件(也可整盘备份)

    linux dd命令参数及用法详解---用指定大小的块拷贝一个文件 日期:2010-06-14 点击:3830 来源: 未知 分享至:            linux dd命令使用详解 dd 的主要 ...

  7. (转)linux expr命令参数及用法详解

    linux expr命令参数及用法详解 原文:http://blog.csdn.net/tianmohust/article/details/7628694 expr用法 expr命令一般用于整数值, ...

  8. (转)Linux curl命令参数详解

    Linux curl命令参数详解 命令:curl在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具.它支持文件的上传和下载,是综合传输工具, ...

  9. (转)linux traceroute命令参数及用法详解--linux跟踪路由命令

    linux traceroute命令参数及用法详解--linux跟踪路由命令 原文:http://blog.csdn.net/liyuan_669/article/details/25362505 通 ...

随机推荐

  1. arduino:int & double 转string 适合12864下使用

    转自:http://www.geek-workshop.com/forum.php?mod=viewthread&tid=3383&highlight=12864 很多人在玩的时候,都 ...

  2. MySQL(九)插入、更新和删除

    常用的SQL语句,除了select用于查询,还有insert.update.delete等. 一.insert insert:用来插入(或添加)行到数据库中,常见方式有以下几种: ①插入完整的行: ② ...

  3. Zephyr的Logging

    1 前言 刚接触Zephyr,两眼一抹黑,光是阅读代码对系统没什么概念.还需要通过一些日志了解系统的运行机制,以及各种内核行为. 这就需要借助系统的Logging,大体分为两部分System Logg ...

  4. 一、java虚拟机内存区域

    内存区域 java虚拟机在java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.java虚拟机规范将JVM管理的内存分为:程序计数器.本地方法栈.Java虚拟机栈.方法区.Java堆.如下 ...

  5. angularjs为ng-click事件传递参数

    在angularjs开发中,我们需要为ng-click事件传递一个参数. 在js中,可以接到参数: 演示:

  6. Newtonsoft的序列化和反序列化

    class test    {        public string a;       public int b;        public byte[] c;        public In ...

  7. Luogu P2048 [NOI2010]超级钢琴

    这道题题号很清新啊!第一次开NOI的题,因为最近考到了这道题的升级版. 我们先考虑\(O(n^2)\)大暴力,就是枚举前后端点然后开一个前缀和减一下即可. 然后引入正解,我们设一个三元组\(F(s,l ...

  8. [Spark][python]以DataFrame方式打开Json文件的例子

    [Spark][python]以DataFrame方式打开Json文件的例子: [training@localhost ~]$ cat people.json{"name":&qu ...

  9. 【已解决】HeidiSQL连接(登录)MySQL数据库报错10061问题

    解决方法: 打开cmd->输入命令services.msc 然后打开即可解决.

  10. Web应用实例:音频可视化

    准备 语言:TypeScript 工具:Visual Studio Code 演示:Audio Visualiazer 小明告诉我,他希望打开一个网页,立即听到他喜欢的音乐,如果有视觉特效就更棒了. ...