GCC 使用说明:常用参数详解与最佳实践

GCC命令与参数详解 使用 GCC 需要对编译的四个阶段(编译过程),以及编译的规则有一定的了解,熟悉使用 GCC 对于编写 Makefile 具有决定性的作用。GCC 的命令使用非常灵活,命令都以 gcc 开头然后配合待编译文件名,编译选项即可(可以说 GCC 就只有一条命令,只是编译选项较多而已)。命令选项可以随意组合,只需要注意选项是否包含参数即可,如果选项包含参数则参数需要紧紧跟随在选项后方。 阅读详情

GCC 使用说明:常用参数详解与最佳实践

摘要

GCC(GNU Compiler Collection)是 Linux 系统下广泛使用的编译器套件,支持多种编程语言。本文详细介绍了 GCC 的常用参数,按功能分类整理,包括基础编译选项、库编译选项、链接选项、优化与调试选项、警告与错误控制以及跨平台与兼容性相关参数。通过灵活组合这些参数,开发者可以高效控制代码生成、优化及兼容性需求,满足不同场景下的开发需求。

一、基础编译选项

1. -c

作用:仅编译源文件生成目标文件(.o),不进行链接。
示例:

gcc -c hello.c -o hello.o

适用场景:分步编译项目或生成静态库/动态库的中间文件。

2. -o <output>

作用:指定输出文件名。
示例:

gcc hello.c -o hello

说明:默认输出文件名为 a.out,此选项可自定义名称。

二、库编译选项

1. -fPIC 与 -fpic

作用:生成位置无关代码(Position-Independent Code)。
核心区别:

  • -fPIC:生成的代码通过全局偏移表(GOT)访问数据/函数,兼容性强(尤其适用于 SPARC、AArch64 等架构)。
  • -fpic:类似 -fPIC,但对 GOT 表大小有限制(适用于 x86 等通用平台)。

强制场景:

  • 动态库(.so)必须使用 -fPIC。
  • 静态库(.a)若被动态库引用或跨平台共享,必须添加 -fPIC。

2. -shared

作用:生成动态链接库(.so 文件)。
示例:

gcc -shared -fPIC -o libhello.so hello.o

说明:需配合 -fPIC 使用,确保代码位置无关。

3. -static

作用:强制静态链接所有库。
示例:

gcc main.c -static -o main

缺点:生成的可执行文件体积较大,但无运行时依赖。

三、链接选项

1. -l<library>

作用:链接指定库(如 -lm 链接数学库 libm.so)。
示例:

gcc main.c -L. -lhello -o main

2. -L<path>

作用:添加库文件的搜索路径。
示例:

gcc main.c -L./lib -lhello -o main

3. -Wl,-rpath=<path>

作用:指定运行时动态库搜索路径(避免依赖 LD_LIBRARY_PATH)。
示例:

gcc main.c -L./lib -lhello -Wl,-rpath=./lib -o main

四、优化与调试选项

1. -O<level>

作用:设置优化级别(-O0 无优化,-O1/-O2/-O3 递增优化强度)。
示例:

gcc -O2 hello.c -o hello

注意:高优化级别可能影响调试信息准确性。

2. -g

作用:生成调试信息(供 GDB 使用)。
示例:

gcc -g hello.c -o hello

冲突:与 -fPIC 同时使用时,某些符号地址可能难以追踪。

五、警告与错误控制

1. -Wall

作用:启用所有常见警告(如未使用变量、类型转换问题)。
示例:

gcc -Wall hello.c -o hello

2. -Werror

作用:将警告视为错误,强制修复所有警告。
示例:

gcc -Wall -Werror hello.c -o hello

六、跨平台与兼容性

1. -m32/-m64

作用:指定生成 32 位或 64 位代码。
示例:

gcc -m32 hello.c -o hello_32

2. -D<macro>

作用:定义预处理器宏。
示例:

gcc -DDEBUG hello.c -o hello

七、总结与最佳实践

静态库(.a)

  • 若仅用于静态链接,无需 -fPIC。
  • 若被动态库引用或跨平台共享,必须添加 -fPIC。

动态库(.so)

  • 必须使用 -fPIC 编译。

调试与优化

  • 优先使用 -O2 平衡性能与编译速度。
  • 调试时保留 -g,但注意 -fPIC 可能影响符号定位。

兼容性

  • 在非 x86 平台(如 ARM、SPARC)优先使用 -fPIC 而非 -fpic。

通过灵活组合上述参数,开发者可以高效控制代码生成、优化及兼容性需求,满足不同场景下的开发需求。

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

相关推荐

【全解析 | PTA】浙大版《Python 程序设计》题目集-第一章

Python浙大版PTA题解

wzhh_的博客 5527

gcc参数详解

gcc参数详解

technologyleader的专栏 2577

Qt上位机实战:5步搞定STM32 IAP固件升级(附拖拽文件处理技巧)

本文详细介绍了如何使用Qt开发STM32 IAP固件升级上位机。通过五个核心步骤,包括理解IAP机制、搭建Qt环境、实现拖拽文件加载、封装串口通信以及设计可靠通信协议,帮助开发者快速构建一个稳定、易用且支持图形化操作的固件升级工具,显著提升嵌入式产品开发与维护效率。

ss78901的博客 1079

gcc 使用中常用的参数及命令

1. 执行过程 虽然我们称Gcc是C语言的编译器,但使用gcc由C语言源代码文件生成可执行文件的过程不仅仅是编译的过程,而是要经历四个相互关联的步骤∶预处理(也称预编译,Preprocessing)、编译(Compilation)、汇编(Assembly)和链接(Linking)。  命令gcc (1). 首先调用cpp进行预处理,在预处理过程中,对源代码文件中的文件...

841

Qwen大模型参数解析

Qwen系列模型的参数主要分为(决定模型结构)和(控制生成行为)两类。由于该系列已迭代多个版本,参数设计也在不断演进,我会结合最新版本为你进行分层梳理。

yeyiboy的博客 166

小程序设计中的区块链应用:数字藏品实现

本文旨在为开发者提供在小程序中实现区块链数字藏品功能的完整技术方案。区块链与数字藏品的基础概念智能合约的设计与实现小程序与区块链的交互方式数字藏品的完整实现流程文章将从基础概念入手,逐步深入到技术实现层面,最后通过完整项目案例展示数字藏品在小程序中的实现方式。每个技术点都会配合代码示例和架构图进行说明。区块链:一种分布式数据库技术,通过加密算法保证数据不可篡改数字藏品:基于区块链技术的数字资产,具有唯一性和可验证性NFT。

小程序开发 1351

gcc详解

GCC笔记 The History of GCC 1984年,Richard Stallman发起了自由软件运动,GNU (Gnu’s Not Unix)项目应运而生,3年后,最初版 的GCC横空出世,成为第一款可移植、可优化、支持ANSI C的开源C编译器。 GCC最初的全名是GNU C Compiler,之后,随着GCC支持的语言越来越多,它的名称变成了GNU Compiler Collection。 这里介绍的gcc是GCC的前端,C编译器. 警告信息 -Wall : 显示所有常用的编译警告信息。 -

惜兰blog 1653

14 | TensorFlow2对阿拉伯语手写字符数据集进行识别

该数据集由 60 名参与者书写的16,800 个字符组成,年龄范围在 19 至 40 岁之间,90% 的参与者是右手。每个参与者在两种形式上写下每个字符(从“alef”到“yeh”)十次,如图 7(a)和 7(b)所示。表格以 300 dpi 的分辨率扫描。使用 Matlab 2016a 自动分割每个块以确定每个块的坐标。该数据库分为两组:训练集(每类 13,440 个字符到 480 个图像)和测试集(每类 3,360 个字符到 120 个图像)。数据标签为1到28个类别。

微信号:RunsenLiu 2876

GCC常用参数详解

简介 gcc and g++现在是gnu中最主要和最流行的c & c++编译器 .gcc/g++在执行编译工作的时候,总共需要以下几步: 1.预处理,生成.i的文件[预处理器cpp] 2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs] 3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as] 4.连接目标代码,生成可执行程序[链接器ld] GCC能够处理的后

小石头 1335

涨点神器:基于YOLOv8的SPD-Conv小目标检测实战教程——让低分辨率场景检测精度飙升

从代码修改到场景落地,每一步都围绕“提升检测精度”这个核心目标,而实际数据也证明了这项技术的强悍——它不是实验室里的花拳绣腿,而是能真正解决工业痛点的涨点神器。在实际场景中,比如无人机巡检的低分辨率航拍图中,对电线、小设备的检测,YOLOv8-SPD的漏检率降低了70%以上。落地时,只需将训练好的YOLOv8-SPD模型部署到边缘设备或云端,即可享受其在小目标、低分辨率场景下的强大性能。的特征融合模块中,通过插入SPD-Conv,让模型在处理小目标时,既能保留空间细节,又能增强通道维度的特征表达。

m0_71589036的博客 157

权重衰减weight_decay参数从入门到精通

Weight Decay是一个正则化技术,作用是**抑制模型的过拟合**,以此来提高模型的泛化性。 目前网上对于Weight Decay的讲解都比较泛,都是短短的几句话,但对于其原理、实现方式大多就没有讲解清楚,本文将会逐步解释weight decay机制。

iioSnail的博客 4万+

GCC 参数详解

PWN——GCC编译中几种保护打开和关闭的参数 NX:-z execstack / -z noexecstack (关闭 / 开启) 栈不可执行,开启后不会把栈上的数据当作代码来执行 Canary:-fno-stack-protector /-fstack-protector / -fstack-protector-all (关闭 / 开启 / 全开启) 打开后会向栈中插入一段特殊数据,在函数返回的时候验证这段特殊数据是否被改变,如果改变,则终止该程序。防止栈溢出。 PIE:-no-pie / -

weixin_45943522的博客 2279

SAP ABAP 获取采购订单未清数量/在途库存的 6 种方式

这篇文章我总结了获取采购订单未清数量/在途库存的 6 种方式,每种方式的优劣势和适用场景有所不同。读者请结合自身需要选择。

SAP李斌,本人承诺所有原创文章均不使用任何AI生成技术,请大家放心阅读。 2665

gcc常用的使用参数

本文详细介绍了GCC编译器的常用参数与实用技巧,涵盖从预处理到优化的完整编译流程。主要内容包括:编译流程控制参数(-E、-S、-c、-o)、警告处理(-Wall、-Werror)、优化选项(-O0到-O3)、调试参数(-g)、头文件与库文件路径设置(-I、-L、-l)、预处理器定义(-D)、C标准选择(-std)等。同时提供了多文件编译、动态库生成等实战示例,以及常见错误的解决方法,帮助开发者高效使用GCC进行项目构建和调试。

2503_90160677的博客 970

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【GCC编译】GCC 使用中常用的参数及命令

【转载】gcc 使用中常用的参数及命令 本文转载自:http://www.cnblogs.com/yaozhongxiao/archive/2012/03/16/2400473.html 如需转载,请注明原始出处。谢谢。 ----------------------------------------------------------------...

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 6万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

GCC常用参数使用说明

GCC(GNU Compiler Collection)是一个开源的编译器,它可以编译多种编程语言的源代码,包括C、C++。本文主要讲述GCC常用参数,分类归纳,从学习认知层面更容易吸收。

u013391407的专栏 1575

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

gcc常用参数详解

这篇文档是我的关于gcc参数的笔记,我很怀念dos年代我用小本子,纪录所有的dos 命令的参数.哈哈,下面的东西可能也不是很全面,我参考了很多的书,和gcc的帮助.不全的原因是,有可能我还没有看到这个参数,另一种原因是,我可能还不会用它:) 不过,我会慢慢的补齐的.哈哈如果你要转在本文章请保留我的email(ianopan@beeship.com)和文章的全面性. [介绍] g

小王的博客 1265

GCC编译器的使用说明

目录 一、gcc编译流程 二、gcc命令使用 2.1 gcc命令格式定义 2.2 gcc命令常用参数 2.2.1 基本参数 2.2.2 调试参数 2.2.3 文件库参数 一、gcc编译流程 GCC编译器在编译一份C代码的时候,需要经过以下4个步骤: 预处理(preprocessing):对.c源文件进行预处理,生成 .i 文件。 编译(compilation):对...

WXS_0218的博客 788

gcc命令常用选项参数详解

gcc是GUN C和C++编译器,我们通常使用GCC时,编译器会依次做如下工作:preprocess(预处理),compilation(编译),assembly(汇编),link(链接)。gcc提供了一些选项参数能够让编译器停在某个过程(如编译过程)。

万里之书 9380

gcc编译生成动态库及gcc参数说明和可变参数的使用

      http://blog.youkuaiyun.com/lb015331/archive/2011/06/16/6547543.aspx        动态库*.so在linux下用c和c++编程时经常会碰到,记录一下(突然用的时候忘了~_~),以便日后查看。  一、编译动态库       下面通过一个例子来说明如何操作。我们将hello.c编译成libhello.so。hell

1309

GCC常用参数及制作使用库

GCC常用参数及制作使用库 常用参数 -o 指定输出文件名 gcc hello.c -o hello -I 指定头文件所在目录 gcc hello.c -o hello -I ./includes -g 添加调试信息,配合gdb使用 gcc main.c -o debug_main -g -I ./includes/ -Wall 显示所有调试信息 gcc main.c -o mai...

XCMercy 655
上一篇: Markdown中微积分公式的LaTeX语法指南
下一篇: GoogleTest 使用文档
未来创世纪
博客等级 码龄18年 960粉丝 209原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值