gcc编译器常用选项的含义

gcc简介和命令行参数说明 文章目录(一) gcc基本用法(二) 警告提示功能选项(三) 库操作选项(四) 调试选项(五) 交叉编译选项 更多的相关资料见:GCC常用参数详解 (一) gcc基本用法 使用gcc编译器时,必须给出一系列必要的调用参数和文件名称。不同参数的先后顺序对执行结果没有影响,只有在使用同类参数时的先后顺序才需要考虑。 如果使用了多个 -L 的参数来定义库目录,gcc会根据多个 -L 参数的先后顺序来执行相应的库目录。 因为很多gcc参数都由多个字母组成,所以gcc参数不支持单字母的组合,Linux中常被叫短参数 阅读详情

gcc是GNU项目中符合ANSI C标准的编译系统,能够编译用C、C++、Object C、Jave等多种语言编写的程序。gcc又可以作为交叉编译工具,它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件。

gcc名称:
GNU project C andC++ Compiler
GNU CompilerCollection


gcc的编译流程有四个步骤:
• 预处理(Pre-Processing)
    gcc  -E  test.c  -o  test.i    //.i文件
• 编译(Compiling)
    gcc  -S  test.i  -o   test.s   //.s文件
• 汇编(Assembling)
    gcc  -c  test.s  -o  test.o    //.o文件
• 链接(Linking)
    gcc  test.o  -o  test    //bin文件

如果是c++ 直接将gcc改为g++即可。


项目实践中最常用的编译选项是:
gcc  -c  test.c           //.o文件,汇编
gcc  -o  test  test.c  //bin可执行文件
gcc  test.c                //test.out可执行文件。这里省略了目标文件,gcc会默认生成可执行的文件,名为:编译文件.out


gcc基本使用格式:
$ gcc [选项] 要编译的文件 [选项] [目标文件]

常用选项及含义:

gcc有超过100个的可用选项,主要包括总体选项、告警和出错选项、优化选项和体系结构相关选项。以下只对部分常用的选项进行解释:

-c 只是编译不链接(仅把源代码编译为目标代码),生成目标文件“.o”。
-E 只进行预编译,不做其他处理。当这个选项被使用时, 预处理器的输出被送到标准输出而不是储存在文件里。
-S 只是编译不汇编,生成汇编代码。(在为C代码产生了汇编语言文件后停止编译。)gcc产生的汇编语言文件的缺省扩展名是.s 。
-o file 把输出文件输出到file里(即:为将产生的可执行文件用指定的文件名。)

-O 对源代码进行基本优化(主要进行跳转和延迟退栈两种优化)。这些优化在大多数情况下都会使程序执行的更快。
-O2 产生尽可能小和尽可能快的代码。 如-O2,-O3,-On(n常为0--3);
-O2 除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等。
-O3 则包括循环展开和其他一些与处理特性相关的优化工作。
选项将使编译的速度比使用 -O 时慢,但通常产生的代码执行速度会更快。如:

$ gcc test.c -O3
$ gcc -O3 test.c
$ gcc -o tt test.c -O2
$ gcc -O2 -o tt test.c

-g 在可执行程序中包含标准调试信息(产生能被GNU调试器使用的调试信息以便调试你的程序。)
-pg 在编译好的程序里加入额外的代码。运行程序时, 产生gprof用的剖析信息以显示你的程序的耗时情况。
-v 打印出编译器内部编译各过程的命令行信息和编译器的版本
-I 指定头文件目录。可以用相对路径,比如头文件在当前目录,可以用-I.来指定。 注意:这里是大写的i
-L 指定库文件目录。可以用相对路径,比如库文件在当前目录,可以用-L.来指定。
-l 指定程序要链接的库,-l参数紧接着就是库名。在 这里解释过把库文件名的头lib和尾.so去掉就是库名。 注意:这里是小写的L
-include 用来包含头文件。一般情况下包含头文件都在源码里用#include <xxx.h>实现,故-include参数很少用。

-static 链接静态库
-llibrary 连接名为 library 的库文件
-Wall 打印出gcc提供的警告信息
-w     关闭所有警告信息
-v      列出所有编译步骤

关于-I,-L和-l的几点补充解释:

    /usr/include目录一般是不用指定的,gcc知道去那里找,但是如果头文件不在/usr/icnclude目录的时候,需要用-I参数告诉gcc,比如头文件放在/myinclude目录里,那编译时加上-I/myinclude,如果不加你会得到一个"xxxx.h: No such file or directory"的错误。如果你指定了-I参数,gcc会先查找这个目录,然后才查找默认路径(/usr/include)。
    比如我们自已要用到一个第三方提供的库名字叫libtest.so,那么我们只要把libtest.so拷贝到 /usr/lib里,编译时加上-ltest参数,我们就能用上libtest.so库了(当然要用libtest.so库里的函数,我们还需要与 libtest.so配套的头文件)。放在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接了,但如果库文件没放在这三个目录里,而是放在其他目录里,这时我们只用-l参数的话,链接还是会出错,出错信息大概是:“/usr/bin/ld: cannot find -lxxx”,也就是链接程序ld在那3个目录里找不到libxxx.so,这时另外一个参数-L就派上用场了,比如常用的X11的库,它放在/usr/X11R6/lib目录下,我们编译时就要用-L/usr/X11R6/lib -lX11参数,-L参数跟着的是库文件所在的目录名。再比如我们把libtest.so放在/aaa/bbb/ccc目录下,那链接参数就是-L/aaa/bbb/ccc -ltest。
    另外,大部分libxxxx.so只是一个链接,以RH9为例,比如libm.so它链接到/lib/libm.so.x,/lib/libm.so.6 又链接到/lib/libm-2.3.2.so,如果没有这样的链接,还是会出错,因为ld只会找libxxxx.so,所以如果你要用到xxxx库,而只有libxxxx.so.x或者libxxxx-x.x.x.so,做一个链接就可以了ln -s libxxxx-x.x.x.so libxxxx.so。手工写链接参数是很麻烦的,很多库开发包提供了生成链接参数的程序,名字一般叫xxxx-config,具体介绍可以点这里(http://blog.youkuaiyun.com/zhuxiaoyang2000/article/details/5575194)。



参考:

http://blog.youkuaiyun.com/rain208/article/details/4060384

http://blog.youkuaiyun.com/zhuxiaoyang2000/article/details/5575194


GCC -O 优化等级详解 GCC提供选项控制代码的优化等级: 这些选项可以实现不同程度的优化。 没有任何优化选项的话,编译时的目标是降低编译成本,并使调试产生预期的结果。语句是独立的:如果你使程序停止在语句之间设置的断点处,你可以改变任何变量的值或者改变程序计数器的值使程序执行任意函数中的语句并得到源代码中期望的结果。 打开优化标志使编译器尝试以编译时间和可能的调试程序的能力为代价来改进性能和/或代码大小。 编译器... 阅读详情

相关推荐

gcc编译器背后的故事

一、GCC简介1.含义2.常用命令3.GCC编译工具 一、GCC简介 1.含义 2.常用命令 3.GCC编译工具

qq_51086303的博客 362

【Linux】Linux编译器-gcc/g++使用

全面了解gcc/g++的使用

m0_68931081的博客 3579

gcc/g++ -print-***选项打印编译器信息

1.-print-file-name=lib 打印链接时将使用的库文件库的绝对全名,而无需执行其他任何操作。使用此选项,GCC不会编译或链接任何内容;它只是打印文件名。 2.-print-multi-directory 打印与命令行中存在的任何其他开关选择的multilib对应的目录名称。该目录应该存在于GCC_EXEC_PREFIX中。 g++ -print-multi-directory . 3.-print-multi-lib 打印从multilib目录名到启用它...

蛐蛐的博客 1654

Linux gcc的使用

自定义可执行程序的名字:gcc test.c -o 新名字(-o后面跟的一定是新可执行程序的名字,和test.c 可交换位置)查看可执行程序依赖的动态库 –-> 可以看出在Linux中,gcc默认采用动态链接的方式。进行到预处理完:gcc -E (源) -o (目的文件,要形成的文件名.i)Pwd(依赖的动态库是c的动态库,可见是由C语言实现的)进行到编译完:gcc -S (源) -o(.s 文件)进行到汇编完:gcc -c (源) -o(.o 文件)依赖静态库的可执行程序更大。动态库和静态库的优缺点。

m0_74022358的博客 1397

从‘包饺子’到‘包络线’:一个生活化比喻讲透长期与短期成本决策

本文通过饺子馆经营的生活化比喻,深入浅出地解析了长期与短期成本决策的核心逻辑。从调整人力(可变成本)到扩建厨房(固定成本),揭示了包络线理论在商业决策中的实际应用,帮助企业主在规模经济与成本控制间找到平衡点。

weixin_32006655的博客 342

STM32F103单片机驱动TM1637数码管显示模块

最近项目中需要用到数码管显示,于是买了一个TM1637芯片驱动的四位数码显示模块,现将调试过程记录一下,方便以后参考。 使用的单片机是STM32F103C8T6最小系统 使用的数码管模块是TM1637四位数码管显示模块 实际运行效果 下面先看一下TM1637和数码管连接的具体线路图 实际使用的模块没有带按键,只用了4个数码管,模块和单片机连接只需要4根线VCC、GND、CLK、DIO。芯片和单片机通信使用的是I2C总线,下面就来说一下如何...

HXYDJ的博客 1万+

GCC的常用选项及含义

GCC 的选项配置是编译时很重要的选择,例如头文件路径、加载库路径、警告信息及调试等。将对常用的选项进行介绍。

xuwaiwai的博客 1115

UDS诊断ISO14229新手入门篇

这个命令的格式稍微复杂一点。sub-function = 0x06 用于读取某个 DTC 及其相关的环境数据,此时 parameter 为 4 个 byte,前三个 byte 用于标识我们要读取的 DTC,第四个 byte 用于标识要读取的环境数据的范围,UDS 规定使用 FF 来表示读取所有的环境数据,各厂家可以要根据自己的需求定义其他的值来代表要读取的环境数据的范围。环境数据包括 DTC 状态,优先级,发生次数,老化计数器,时间戳,里程等,厂家还可以根据自己的需求定义一些此 DTC 产生时的测量数据。

weixin_45387165的博客 1974

GCC笔记(警告.优化以及调试选项)

GCC提供了大量的警告选项,对代码中可能存在的问题提出警告,通常可以使用-Wall来开启以下警告:             -Waddress -Warray-bounds (only with -O2) -Wc++0x-compat           -Wchar-subscripts -Wimplicit-int -Wimplicit-function-declaration    

u013982161的专栏 1万+

六自由度机器人(机械臂)运动学建模及运动规划系列(四)——轨迹规划

本篇介绍了六轴机器人关节空间以及笛卡尔空间轨迹规划的简单方法,并给出了一种几何解法,以简化规划过程,并提供了简单的Matlab轨迹规划函数介绍。

weixin_47849087的博客 5万+

Ubuntu终端接入Codex:一行脚本搞定AI编程助手安装与配置

在开发者日常工作中,命令行终端是最高频的操作环境,而AI编程助手的出现正在改变传统的编码方式。通过将大模型能力与终端工具链结合,开发者无需切换窗口即可完成命令查询、代码生成、项目理解和自动执行等任务。Ubuntu作为服务器和开发机的主流系统,搭配Node.js生态和API Key认证,即可在本地闭环运行AI助手。本文从环境准备、密钥配置、权限管理到自动化脚本封装,系统拆解在终端中接入Codex的完整流程,并分享高频用法与实测排障经验,帮助开发者安全、高效地让AI融入命令行工作流。

weixin_29061041的博客 323

转 gcc编译选项总结

转载:https://blog.youkuaiyun.com/boyemachao/article/details/94160667 [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs] 3.有汇编变为目标代码(机器代...

倦鸟归时 742

【扫地机器人测试】

本测试方案旨在系统性评估扫地机器人的核心功能、性能指标、可靠性及用户体验,验证产品是否符合设计规范、行业标准及市场需求。通过多维度、全场景的测试,精准定位产品缺陷与优化空间,为产品迭代提供数据支撑,确保上市产品的质量稳定性与用户满意度。

xuhuaiyaun的博客 1372

gcc和arm-linux-gcc的常用选项

gcc和arm-linux-gcc的常用选项 gcc的使用方法: gcc  [选项]   文件名          gcc常用选项:   -v:      查看gcc编译器的版本,显示gcc执行时的详细过程    -o &lt;file&gt;      Place the output into &lt;file&gt;                            指定输出文...

y786256773的博客 323

相机标定-机器视觉基础(理论推导、Halcon和OpenCV相机标定)

相机标定是获得目标工件精准坐标信息的基础。首先,必须进行相机内参标定,构建一个模型消除图像畸变;其次,需要对相机和机器人的映射关系进行手眼标定,构建一个模型将图像坐标系上的点映射到世界坐标系。主要分为背景知识、相机内外参模型推导、编程代码实现三个部分。

beyond951的博客 7303

Claude Code 处理长任务 + Cursor 专注交互:双栈协作的 3 种分工场景与响应提速 35% 实测

揭示 Claude Code 与 Cursor 在 AI 编程中的本质分工:Claude Code 作为离线式架构师处理跨文件、带约束的长链路重构(如单体拆微服务),Cursor 作为现场交互工程师专注秒级局部编辑;提出按任务切片动态切换的三种工程化协作场景,并给出结构化上下文构建、约束型 Prom

weixin_28728443的博客 123

Linux学习——01 gcc编译器

gcc编译器的一些知识整理

qq_50615776的博客 685

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

gcc的用法

Linux基础学习:gcc的用法

weixin_54706831的博客 464

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Visual Stdio C++ 编译器、链接器常用命令行选项总结

以前使用 Visual Stdio 都是在 IDE 环境下。这两天编译 GSL 感觉用 IDE 环境特别不方便,所以就花了点时间简单学习了如何在命令行下使用 Visual Stdio C++ 编译器、连接器。我个人对 gcc 还是比较熟悉的,所以这里的各种用法都做了 gcc 的类比,这样也便于记忆。编译器 CLVisual Stdio 中的 C/C++ 编译器都是同一个,叫做 CL。下面表格列出了

Ivan 的专栏 9841

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

linux下gcc编辑器使用

gcc是一个c语言编译器,全程为GNU C Compiler的英文缩写。gcc具有交叉编译功能,即在一个平台下编译另一个平台的代码。 gcc支持的后缀名解释: .c //c语言源代码文件 .a //有目标构成的档案库文件,静态库文件 .C .cc 或 .cxx //C++源代码文件 .h...

u010068160的博客 311

gcc起步

文件扩展名:在使用GCC的过程中,用户对一些常用的扩展名一定要熟悉,并知道其含义.为了方便大家学习使用GCC,在此将这些扩展名罗列如下:.c C原始程序;.C C++原始程序;.cc C++原始程序;.cxx C++原始程序;.m Objective-C原始程序;.i 已经过预处理的C原始程序;.ii 已经过预处理之C++原始程序;.s 组合语言原始程序;.S 组合语言原始程序;.h 预处理文件(...

weixin_30633949的博客 184

gcc编译器用法linux,gcc编译器用法

一个用c语言写的程序把他编译成计算机可执行的文件,一般有4个步骤/*================================================================* Copyright (C) 2018 . All rights reserved.** 文件名称:helloworld.c* 创 建 者:ghostwu(吴华)* 描 述:gcc...

weixin_35796523的博客 309

【Linux】Linux编译器-gcc/g++使用和gcc具体编译过程以及编译选项的小插曲

预处理 :E编译 :S汇编 :c连接 :c执行10Hello此时,我们想一下在连接中是怎样连接的,和谁连接,怎样实现的,在下一篇文章中小编会详解。

2402_87310323的博客 873

gcc编译器常用选项及功能

文章目录gcc提供的工具gcc常用选项预处理阶段常用选项生成库文件静态链接库动态链接库链接库文件链接动态库文件链接静态库文件查看库的依赖属性动态加载库文件 gcc提供的工具 gcc常用选项 选项 说明 示例 -E 预处理指定的源文件,不进行编译,生成.i文件 gcc -E circle.c -o circle.i -S 编译指定的源文件,但是不进行汇编,生成.s文件 -c 编译、汇编但是不连接,生成.o文件 gcc -c test1.c test2.c test3.c -o

whitefish520的博客 1万+

GCC编译器介绍及常见的编译选项使用方法

GCC编译器介绍及常见的编译选项使用方法

jackiendsc的博客 3915

我常用的gcc编译器选项

本文来小结一下我常用的gcc编译器选项:       1. gcc test.c       这个最直接, 会在当前目录下生成a.out, 然后执行./a.out就可以运行程序了。 我在玩程序的时候, 最喜欢用这个, 简洁清晰。       2. gcc -o test test.c        这个o, 是小写的, 并不是指定什么目标文件(object file), 而是指定可

认知 行动 坚持 8339
上一篇: gcc/g++使用第三方库时添加头文件路径和库文件路径的方法
下一篇: Linux下c++调用自己编写的matlab函数:通过mcc动态链接库.so实现
arackethis
博客等级 码龄12年 86粉丝 81原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值