当前位置: 首页 > news >正文

gcc和gcc -c区别

`gcc` 和 `gcc -c` 之间的主要区别在于编译过程的不同阶段以及最终生成的输出文件类型。理解这两者的区别对于有效地管理和构建项目非常重要。

### `gcc`(默认行为)

当你使用 `gcc` 编译器而没有指定 `-c` 选项时,GCC 会执行整个编译链的所有步骤:预处理、编译、汇编和链接。这意味着它不仅会处理源代码并生成目标代码,还会将这些目标代码链接在一起(包括任何需要的库),以创建一个可执行文件或共享库。

**流程:**

1. **预处理**:处理所有的预处理器指令(如 `#include` 和 `#define`)。
2. **编译**:将预处理后的代码转换为汇编语言代码。
3. **汇编**:将汇编语言代码转换为目标代码(机器码)。
4. **链接**:将所有目标文件和库链接在一起,生成最终的可执行文件或共享库。

**示例命令:**

```bash
gcc main.c util.c -o my_program
```

这条命令会编译 `main.c` 和 `util.c` 文件,并将它们链接成一个名为 `my_program` 的可执行文件。

### `gcc -c`

当你使用 `gcc -c` 选项时,GCC 只执行编译链中的前三个步骤:预处理、编译和汇编,但不会进行链接。因此,每个输入的源文件都会生成一个对应的目标文件(`.o` 文件),而不是创建一个可执行文件或共享库。

**流程:**

1. **预处理**:处理所有的预处理器指令(如 `#include` 和 `#define`)。
2. **编译**:将预处理后的代码转换为汇编语言代码。
3. **汇编**:将汇编语言代码转换为目标代码(机器码)。
4. **不链接**:不执行链接步骤。

**示例命令:**

```bash
gcc -c main.c -o main.o
gcc -c util.c -o util.o
```

这两条命令会分别编译 `main.c` 和 `util.c` 文件,生成 `main.o` 和 `util.o` 目标文件,但不会将它们链接成可执行文件。

### 使用场景

- **`gcc`**:当你想要直接从源代码生成一个完整的可执行文件或共享库时,使用 `gcc` 是最简单的方法。这在你有一个小项目或者所有源文件都准备好要一起编译时特别有用。
  
- **`gcc -c`**:当你希望分离编译和链接步骤时,`gcc -c` 是更好的选择。这在大型项目中尤其有用,因为它允许你只重新编译那些更改过的文件,然后在最后一步将所有目标文件链接在一起。此外,如果你正在开发库或模块化项目,先生成目标文件再进行链接可以更好地组织代码。

### 示例 Makefile

为了更清晰地展示这两种方式的区别,这里是一个简单的 Makefile 示例:

```makefile
# 设置C编译器
CC = gcc

# 设置C编译标志
CFLAGS = -Wall -fPIC -I/path/to/include

# 设置输出目录
OBJDIR = ./obj

# 设置源文件列表
SRCS = main.c util.c helper.c

# 设置目标文件列表
OBJS = $(patsubst %.c,$(OBJDIR)/%.o,$(SRCS))

# 设置输出文件名称
TARGET = my_program

# 确保输出目录存在
$(OBJDIR):
    mkdir -p $@

# 编译规则,将所有源文件编译为目标文件
$(OBJDIR)/%.o: %.c | $(OBJDIR)
    $(CC) $(CFLAGS) -c $< -o $@

# 链接规则,将所有目标文件链接为最终的可执行文件
$(TARGET): $(OBJS)
    $(CC) -o $@ $^

# 清理规则
clean:
    rm -rf $(OBJDIR) $(TARGET)

.PHONY: clean
```

在这个 Makefile 中:

- 使用 `gcc -c` 来单独编译每个源文件为目标文件。
- 使用 `gcc` 来链接所有目标文件,生成最终的可执行文件 `my_program`。

相关文章:

gcc和gcc -c区别

gcc 和 gcc -c 之间的主要区别在于编译过程的不同阶段以及最终生成的输出文件类型。理解这两者的区别对于有效地管理和构建项目非常重要。 ### gcc&#xff08;默认行为&#xff09; 当你使用 gcc 编译器而没有指定 -c 选项时&#xff0c;GCC 会执行整个编译链的所有步骤&…...

从一次线上故障聊聊接口自动化测试

1、背景 3月初&#xff0c;运营同事配置了个还未上线的页面到网站首页 banner&#xff0c;导致用户点了报错。尽管这次很明确是运营人为操作失误引起的故障&#xff0c;但过往此类核心页面的访问异常&#xff0c;我们已不是第一次遇见。 从平台整体利益触发&#xff0c;我们各…...

工业大数据分析算法实战-day15

文章目录 day15特定数据类型的算法工业分析中的数据预处理工况划分数据缺失时间数据不连续强噪声大惯性系统趋势项消除 day15 今天是第15天&#xff0c;昨日是针对最优化算法、规则推理算法、系统辨识算法进行了阐述&#xff0c;今日主要是针对其他算法中的特定数据类型的算法…...

QLocalServer本地进程通信发送数据丢失部分数据丢失解决方案

问题说明 Qt使用QLocalServer进行本地进程通信&#xff0c;发现数据随机丢失。例如&#xff0c;我需要连续发送7个数据&#xff0c;如果连续调用socket的write接口&#xff0c;会引起数据随机丢失&#xff0c;导致数据不完整。 解决方案 我这里的解决方案是&#xff0c;将7个…...

0.gitlab ubuntu20.04 部署问题解决

安装依赖&#xff1a; ① sudo apt-get update 出现&#xff1a; 解决方式&#xff1a; 去 /etc/apt/sources.list.d 这个目录删除或注释对应的list文件 第三方软件的源一般都以list文件的方式放在 /etc/apt/sources.list.d 这个目录 重新运行sudo apt-get update 安装…...

tomcat temp临时文件不清空,占用硬盘,jdk字体内存泄漏

JSP老旧项目迁移过来的代码&#xff0c;生成海报&#xff0c;会读取图片&#xff0c;读取字体文件&#xff0c;绘制图片&#xff0c;会生成大量临时文件&#xff0c;内存泄漏。 方案一&#xff0c;服务器定时删除temp临时文件夹 方案二&#xff0c;图片、字体改用静态类读取文件…...

元宇宙中的去中心化应用:Web3的未来角色

随着科技的快速发展&#xff0c;元宇宙已经成为了全球关注的焦点&#xff0c;成为一种新型的虚拟世界互动平台。与此同时&#xff0c;Web3作为新一代互联网技术&#xff0c;借助去中心化的理念&#xff0c;为元宇宙的发展提供了技术支撑。从虚拟互动到数字身份管理&#xff0c;…...

中关村科金智能客服机器人如何解决客户个性化需求与标准化服务之间的矛盾?

客户服务的个性化和标准化之间的矛盾一直是一个挑战。一方面&#xff0c;企业需要提供标准化的服务以保持运营效率和成本控制&#xff1b;另一方面&#xff0c;为了提升客户满意度和忠诚度&#xff0c;企业又必须满足客户的个性化需求。为此&#xff0c;中关村科金推出了智能客…...

【ROS2】坐标TF发布(动态)

1、创建目录 mkdir -p ~/ros/src/laoer_tf2、创建包 cd /home/laoer/ros/eg/src/cpp/laoer_tf ros2 pkg create --build-type ament_cmake laoer_tf \--dependencies rclcpp tf2_ros geometry_msgs \--license Apache-2.03、源码 3.1 TF消息TransformStamped 1)消息类型 …...

图解HTTP-HTTP状态码

状态码 状态码的职责是当客户端向服务器端发送请求时&#xff0c;描述返回的请求结果。 类别原因短语1XXInformational(信息状态码)接收的请求正在处理2XXSuccess&#xff08;成功状态码&#xff09;请求正常处理完毕4XXRedirection &#xff08;重定向状态码&#xff09;需要…...

SAP消息号 FD014 (抬头)没有指定国际标准货币代码 CNY

1、IDOC配置完成后&#xff0c; 2、业务下单-发货-开票&#xff08;2张&#xff09; 3、WE02 查看IDOC时发现 从报错看是货币代码设置问题。 4、解决&#xff1a; OY03 RMB和CNY同时勾选导致 RMB不勾选主要。...

GRUtopia:构建虚拟世界中的智能机器人社会

人工智能咨询培训老师叶梓 转载标明出处 人工智能讲师大模型讲师叶梓前沿技术分享&#xff1a;GRUtopia&#xff1a;构建虚拟世界中的智能机器人社会 随着Embodied AI&#xff08;具身智能&#xff09;领域的快速发展&#xff0c;对于能够在复杂环境中执行任务的机器人的需求日…...

华为:数字化转型只有“起点”,没有“终点”

上个月&#xff0c;我收到了一位朋友的私信&#xff0c;他询问我是否有关于华为数字化转型的资料。幸运的是&#xff0c;我手头正好收藏了一些&#xff0c;于是我便分享给他。 然后在昨天&#xff0c;他又再次联系我&#xff0c;并感慨&#xff1a;“如果当初我在进行企业数字…...

在开发嵌入式系统时,尤其是处理大数时,会遇到取值范围的问题。51单片机通常没有内建大整数支持,因此我们需要采用不同的方法来解决这一问题

00 两种可行方法分别是&#xff1a; 使用数组存储每一位数据并进行进位运算&#xff1a;通过将大数按位拆分成数组&#xff0c;然后实现逐位加法、进位等操作。使用符号变量进行计算&#xff1a;将数值分成低位和高位&#xff0c;分别用符号变量进行计算。 01&#xff1a;使用…...

STM32 与 AS608 指纹模块的调试与应用

前言 在嵌入式系统中&#xff0c;指纹识别作为一种生物识别技术&#xff0c;广泛应用于门禁系统、考勤机、智能锁等场景。本文将分享如何在 STM32F103C8T6 开发板上使用 AS608 指纹模块&#xff0c;实现指纹的录入和识别功能。 硬件准备 STM32F103C8T6 开发板AS608 指纹模块…...

腾讯PHP经典面试题(附答案)

腾讯PHP经典面试题&#xff08;附答案&#xff09; PHP开发工程师笔试试卷 姓名:PHP 一、PHP开发部分 1&#xff0e;合并两个数组有几种方式&#xff0c;试比较它们的异同 答&#xff1a; 1、array_merge() 2、’’ 3、array_merge_recursive array_merge 简单的合并数…...

LightGBM分类算法在医疗数据挖掘中的深度探索与应用创新(上)

一、引言 1.1 医疗数据挖掘的重要性与挑战 在当今数字化医疗时代,医疗数据呈爆炸式增长,这些数据蕴含着丰富的信息,对医疗决策具有极为重要的意义。通过对医疗数据的深入挖掘,可以发现潜在的疾病模式、治疗效果关联以及患者的健康风险因素,从而为精准医疗、个性化治疗方…...

【PCIe 总线及设备入门学习专栏 1.1 -- PCIe 基础知识 lane和link介绍】

文章目录 OverivewLane 和 LinkRC 和 RPPCIe controllerPCIE ControllerPHY模块 Inbound 和 OutboundPCIe transaction modelPIODMAP2P Overivew PCIe&#xff0c;即PCI-Express总线&#xff08;Peripheral Component Interconnect Express&#xff09;&#xff0c;是一种高速…...

PCDN 适合哪些人群?

家用宽带用户:对于家中有宽带&#xff0c;且宽带闲置时间较多的用户来说&#xff0c;PCDN是一个非常好的赚钱方式。只要你有足够的带宽和一台稳定的设备&#xff0c;就可以轻松参与。 小型网络运营者:如果你是小型网络运营者&#xff0c;拥有大量的闲置带宽资源PCDN 可以帮助你…...

C++之红黑树模拟实现

目录 红黑树的概念 红黑树的性质 红黑树的查找效率 红黑树的实现 红黑树的定义 红黑树节点的插入 红黑树的平衡调整 判断红黑树是否平衡 红黑树整体代码 测试代码 上期我们学习了AVL树的模拟实现&#xff0c;在此基础上&#xff0c;我们本期将学习另一个数据结构-…...

一分钟快速解读LEED绿色建筑认证

一分钟快速解读LEED绿色建筑认证——引领未来建筑绿色革命的风向标 LEED&#xff0c;全称为“Leadership in Energy and Environmental Design”&#xff0c;是美国绿色建筑委员会&#xff08;USGBC&#xff09;开发并推广的一套国际公认的绿色建筑评估体系。它如同一座灯塔&am…...

C# 语法糖集锦

文章目录 1、自动属性(Auto - Properties)2、对象和集合初始化器(Object and Collection Initializers)3、匿名类型(Anonymous Types)4、扩展方法(Extension Methods)5、Lambda 表达式(Lambda Expressions)6、空合并运算符(??)和空条件运算符(?.)7、隐式类型数…...

centos制作离线安装包

目录 1.yumdownloader与repotrack怎么选择&#xff1f; yumdownloader --resolve repotrack 总结 2.环境准备 3.安装 1.yumdownloader与repotrack怎么选择&#xff1f; yumdownloader --resolve 和 repotrack 都是与 YUM&#xff08;Yellowdog Updater Modified&#xf…...

HTML5 学习资源

HTML5 学习资源 学习HTML5的资源丰富多样&#xff0c;以下是一些推荐的在线教程、书籍和社区论坛&#xff0c;帮助你更好地掌握HTML5。 11.1 在线教程和课程 MDN Web Docs&#xff1a; MDN HTML 教程提供详细的HTML5文档和实例&#xff0c;适合各个水平的开发者。 W3Schools…...

大模型(LLM)提示工程(Prompt Engineering)初识

大模型提示工程&#xff08;Prompt Engineering&#xff09;是指设计和优化给定任务的输入提示&#xff0c;以便从大型语言模型&#xff08;如GPT-4、GPT-3等&#xff09;中获得最佳输出。其核心目标是通过合理设计输入内容&#xff08;提示词或提示结构&#xff09;&#xff0…...

uni-app 统一请求处理 请求拦截器 响应拦截器 请求封装

封装API接口 import {http} from ../utils/request.js export function login(code){return http({url:/wx/getSession,method: GET,data:{code}}) }调用接口 import {login,test,phoneMessage,updateAvatar} from ../../api/user.js function userLogin(){ login(code.value…...

web 渗透学习指南——初学者防入狱篇

目录 一、学习方向和基础知识二、知识点详细总结三、学习流程和典型案例 案例1&#xff1a;SQL注入漏洞检测与利用案例2&#xff1a;XSS攻击检测与利用案例3&#xff1a;文件上传漏洞利用案例4&#xff1a;CSRF攻击实现 四、常用工具推荐和使用方法五、初学者实用学习资源六、渗…...

卷积神经网络入门指南:从原理到实践

目录 1 CNN的发展历史 2 CNN的基本原理 3 CNN核心组件 3.1 卷积操作基础 3.2 卷积层详解 3.3 高级卷积操作 3.3.1 分组卷积&#xff08;Group Convolution&#xff09; 3.3.2 深度可分离卷积&#xff08;Depthwise Separable Convolution&#xff09;&#xff1a; 3.3 池…...

vscode添加全局宏定义

利用vscode编辑代码时&#xff0c;设置了禁用非活动区域着色后&#xff0c;在一些编译脚本中配置的宏又识别不了 遇到#ifdef包住的代码就会变暗色&#xff0c;想查看代码不是很方便。如下图&#xff1a; 一 解决&#xff1a; 在vscode中添加全局宏定义。 二 步骤&#xff1a…...

Mysql InnoDB存储引擎中聚簇索引和非聚簇索引的区别

最核心的区别还是从需求角度来看比较好&#xff1a; 1.创建索引时 在创建表时&#xff0c;InnoDB存储引擎会根据不同情况&#xff0c;选择不同的列作为索引 &#xff08;1&#xff09;有主键&#xff0c;通过主键作为聚簇索引的索引键&#xff08;key) &#xff08;2&#xf…...

使用vcpkg安装opencv>=4.9后#include<opencv2/opencv.hpp>#include<opencv2/core.hpp>无效

使用vcpkg安装opencv>4.9后#include<opencv2/opencv.hpp>#include<opencv2/core.hpp>无效\无法查找或打开 至少从2024年开始&#xff0c;发布的vcpkg默认安装的opencv版本都是4.x版。4.8版本及以前&#xff0c;vcpkg编译后的opencv头文件目录是*/vcpkg/x64-win…...

opencv sdk for java中提示无stiching模块接口的问题

1、问题介绍 安卓项目中有新的需求&#xff0c;在 jni 中增加 stiching_detail.cpp 中全景拼接的实现。 但是在编译时&#xff0c;出现大量报错&#xff0c;如下截图所示 实际上&#xff0c;其他opencv的接口函数 例如 core dnn等都能正常使用&#xff0c;直觉上初步怀疑 ope…...

大恒相机开发(2)—Python软触发调用采集图像

大恒相机开发&#xff08;2&#xff09;—Python软触发调用采集图像 完整代码详细解读和功能说明扩展学习 这段代码是一个Python程序&#xff0c;用于从大恒相机采集图像&#xff0c;通过软件触发来采集图像。 完整代码 咱们直接上python的完整代码&#xff1a; # version:…...

gitlab克隆仓库报错fatal: unable to access ‘仓库地址xxxxxxxx‘

首次克隆仓库&#xff0c;失效了&#xff0c;上网查方法&#xff0c;都说是网络代理的问题&#xff0c;各种清理网络代理后都无效&#xff0c;去问同事&#xff1a; 先前都是直接复制的网页url当做远端url&#xff0c;或者点击按钮‘使用http克隆’ 这次对于我来说有效的远端u…...

代码随想录day27 贪心1

题目&#xff1a;455.分发饼干 376.摆动序列 53.最大子序和 需要重做&#xff1a;全部 贪心算法其实就是没有什么规律可言&#xff0c;所以大家了解贪心算法 就了解它没有规律的本质就够了。 不用花心思去研究其规律&#xff0c; 没有思路就立刻看题解。 理论基础 贪心的…...

Hive 部署

1 下载并安装 1.1 Hadoop安装 参考另一篇博客&#xff1a;Hadoop 部署 1.2 安装包下载 可通过下面网站下载&#xff1a; 官网&#xff1a;https://dlcdn.apache.org/hive/。清华源&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/apache/hive/。 比如下载apache-hive-4…...

SDK 指南

在前端开发中&#xff0c;SDK&#xff08;Software Development Kit&#xff0c;软件开发工具包&#xff09;是一个用于帮助开发者在特定平台、框架或技术栈中实现某些功能的工具集。 1. SDK 是什么&#xff1f; SDK 是一种开发工具包&#xff0c;它提供了开发人员实现某些功…...

unity Default constructor not found for type 的问题

文章目录 前言一、怎么解决&#xff1f;总结 前言 突然有一次打包PC的包出来&#xff0c;JSON就无法正常获取&#xff0c;后来找到原因&#xff1a; 应该是设置渲染等级相关的东西&#xff0c;不小心把剥离等级设置套高了。 一般情况不会出现&#xff0c;向我这种老爱unity 编…...

富文本编辑器实现表单非空校验

首先尝试使用form的rules规则去验证&#xff0c;发现未生效&#xff1b; <el-form ref"form" :disabled"readonly" :model"form" :rules"rules" label-width"120px"><el-form-item label"内容" prop&quo…...

使用uniapp开发微信小程序-框架搭建

最近要开发一个小程序&#xff0c;为了降低学习成本&#xff0c;最后还是选择使用uniapp来开发&#xff0c;但是由于电脑性能不行&#xff0c;实在不想多跑一个应用程序&#xff0c;就简单搭建了一个可以用vscode跑的uniapp项目。 项目整体技术栈&#xff1a;vue3 pinia type…...

华为浏览器(HuaweiBrowser),简约高效上网更轻松

华为浏览器是一款由华为公司自主研发的网页浏览工具&#xff0c;凭借其独特的设计理念和优质的用户体验&#xff0c;正在吸引越来越多的用户关注。这款基于Chromium技术打造的浏览器不仅继承了Chrome的高性能特质&#xff0c;更融入了华为自身的创新元素&#xff0c;为用户打造…...

SQLite

文章目录 1、什么是信息?2、 数据库模型3、sqLite 数据库4、 SQL 语句基础5、对数据库文件 SQL 语句:6、创建表:create 语句7、创建表:create 语句(设置主键)8、查看表: .table9、修改表: alter语句10、删除表:drop table 语句11、插入新行:insert into 语句(全部赋值)12、插入…...

uniapp下拉选择组件

目录 背景 实现思路 代码实现 配置项 使用 尾巴 背景 最近遇到一个这样的需求&#xff0c;在输入框中输入关键字&#xff0c;通过接口查询到结果之后&#xff0c;以下拉框列表形式展现供用户选择。查询了下uni-app官网和项目中使用的uv-ui库&#xff0c;没找到符合条件的…...

解决 vue3 中 echarts图表在el-dialog中显示问题

原因&#xff1a; 第一次点开不显示图表&#xff0c;第二次点开虽然显示图表&#xff0c;但是图表挤在一起&#xff0c;页面检查发现宽高只有100px,但是明明已经设置样式宽高100% 这可能是由于 el-dialog 还没有完全渲染完成&#xff0c;而你的 echarts 组件已经开始尝试渲染图…...

WebSSH:基于Go实现的高效Web SSH客户端指南

WebSSH&#xff1a;基于Go实现的高效Web SSH客户端指南 WebSSH 功能强大&#xff0c;Go 实现的一个WebSSH&#xff0c;支持文件上传下载 [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/webssh1/WebSSH 项目基础介绍&#xff1a; WebSSH是一个由Golang编写的高效…...

Hive其四,Hive的数据导出,案例展示,表类型介绍

目录 一、Hive的数据导出 1&#xff09;导出数据到本地目录 2&#xff09;导出到hdfs的目录下 3&#xff09;直接将结果导出到本地文件中 二、一个案例 三、表类型 1、表类型介绍 2、内部表和外部表转换 3、两种表的区别 4、练习 一、Hive的数据导出 数据导出的分类&…...

shell脚本定义特殊字符导致执行mysql文件错误的问题

记得有一次版本发布过程中有提供一个sh脚本用于一键执行sql文件&#xff0c;遇到一个shell脚本定义特殊字符的问题&#xff0c;sh脚本的内容类似以下内容&#xff1a; # 数据库ip地址 ip"127.0.0.1" # 数据库密码 cmdbcmdb!#$! smsm!#$!# 执行脚本文件&#xff08;参…...

【从零开始入门unity游戏开发之——C#篇29】C#泛型(T)和 泛型约束

文章目录 一、泛型1、泛型是什么2、泛型分类2.1. **泛型类和泛型接口**2.2. **泛型方法** 3、泛型类和接口3.1 泛型类示例&#xff1a;3.2 泛型接口示例&#xff1a;3.3 泛型类接受多个类型参数&#xff1a; 4、泛型方法4.1. **普通类中的泛型方法**4.2. **泛型类中的泛型方法*…...

一个从oracle使用spool导出数据到kadb的脚本

1. dump_data.sh调用sql_dump.sh导出数据 2. load_data.sh将导出的数据加载至KADB 1. dump_data.sh #!/bin/bash begin_time$(date %Y%m%d -d -1 day) end_time$(date %Y%m%d) echo "数据导出日期:"$begin_time echo "数据导出日期:"$begin_time >>…...

两道数组有关的OJ练习题

系列文章目录 &#x1f388; &#x1f388; 我的CSDN主页:OTWOL的主页&#xff0c;欢迎&#xff01;&#xff01;&#xff01;&#x1f44b;&#x1f3fc;&#x1f44b;&#x1f3fc; &#x1f389;&#x1f389;我的C语言初阶合集&#xff1a;C语言初阶合集&#xff0c;希望能…...