linux学习:gcc编译

编译.c

gcc hello.c -o hello

用gcc 这个工具编译 hello.c,并且使之生成一个二进制文件 hello。 其中 –o 的意义是 output,指明要生成的文件的名称,如果不写 –o hello 的话会生成默 认的一个 a.out 文件

获得 C 源程序经过预处理之后的文件

gcc hello.c -o hello.i -E

加上一个编译选项 -E 就可以使得 GCC 在进行完第一阶段的预处理之后停下来,生成 一个默认后缀名为.i 的文本文件。

获得 C 源程序经过预处理和编译之后的汇编程序

gcc hello.i -o hello.s -S

加上一个编译选项 -S 就可以使得 gcc 在进行完第一和第二阶段之后停下来,生成一 个默认后缀名为.s 的文本文件。打开此文件看一看,你会发现这是一个符合 x86 汇编语言 的源程序文件

将.s 文件里面的汇编翻译成指令

gcc hello.s -o hello.o -c

只要在编译的时候加上一个编译选项-c,则会生成一个扩展名为.o 的文件, 这个文件是一个 ELF 格式的可重定位(relocatable)文件,所谓的可重定位,指的是该文件 虽然已经包含可以让处理器直接运行的指令流,但是程序中的所有的全局符号尚未定位,所 谓的全局符号,就是指函数和全局变量,函数和全局变量默认情况下是可以被外部文件引用 的,由于定义和调用可以出现在不同的文件当中,因此他们在编译的过程中需要确定其入口 地址,比如 a.c 文件里面定义了一个函数 func( ),b.c 文件里面调用了该函数,那么在完 成第三阶段汇编之后,b.o 文件里面的函数 func( )的地址将是 0,显然这是不能运行的, 必须要找到 a.c 文件里面函数 func( )的确切的入口地址,然后将 b.c 中的“全局符号”func 重新定位为这个地址,程序才能正确运行

编译一个程序通常 都需要链接系统的标准 C 库、gcc 内置库等基本库文件

 gcc hello.o -o hello -lc -lgcc

标准 C 库和 gcc 内置库是如此的基本,因此-lc 和-lgcc

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798722.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

书生·浦语训练营二期第三次笔记-茴香豆:搭建你的 RAG 智能助理

RAG学习文档1: https://paragshah.medium.com/unlock-the-power-of-your-knowledge-base-with-openai-gpt-apis-db9a1138cac4 RAG学习文档2: https://blog.demir.io/hands-on-with-rag-step-by-step-guide-to-integrating-retrieval-augmented-generation-in-llms-a…

C/C++ std::list 插入时即整理顺序(ASC升序)

下面是一个随机的 packet(帧)插入函数,ASC升序,按 “packet_seq” 来控制成员之间的顺序,该函数优化了,倾向头、倾向尾。 即: 根据 packet_seq 可以得出,插入位置的最短距离&#x…

【JavaScript】如何在npm中切换源以及使用指定源安装依赖

忘不掉的是什么我也不知道 想不起当年模样 看也看不到 去也去不了的地方 也许那老街的腔调是属于我的忧伤 嘴角那点微笑越来越勉强 忘不掉的是什么我也不知道 放不下熟悉片段 回头望一眼 已经很多年的时间 透过手指间看着天 我又回到那老街 靠在你们身边渐行渐远 …

SpringBoot中实现阿里云验证码

要在SpringBoot中实现阿里云验证码发送,可以按照以下步骤进行: 注册阿里云账号:首先,你需要在阿里云官网注册一个账号,并登录到阿里云控制台。 创建短信服务:在阿里云控制台中,选择"短信服…

C#/.NET/.NET Core推荐学习书籍(24年4月更新,已分类)

前言 古人云:“书中自有黄金屋,书中自有颜如玉”,说明了书籍的重要性。作为程序员,我们需要不断学习以提升自己的核心竞争力。以下是一些优秀的C#/.NET/.NET Core相关学习书籍(包含了C#、.NET、.NET Core、Linq、EF/E…

云原生安全当前的挑战与解决办法

云原生安全作为一种新兴的安全理念,不仅解决云计算普及带来的安全问题,更强调以原生的思维构建云上安全建设、部署与应用,推动安全与云计算深度融合。所以现在云原生安全在云安全领域越来受到重视,云安全厂商在这块的投入也是越来…

Stable Diffusion初级教程

一、入门篇 1. 理解基本概念 扩散模型(Diffusion Models):扩散模型是一种生成模型,通过逐步添加噪声到数据样本中,然后学习如何逐步去除这些噪声来恢复原始数据。Latent Diffusion Model (LDM):LDM是Stab…

【华为OD机试】需要打开多少监视器(贪心算法—JavaPythonC++JS实现)

本文收录于专栏:算法之翼 本专栏所有题目均包含优质解题思路,高质量解题代码(Java&Python&C++&JS分别实现),详细代码讲解,助你深入学习,深度掌握! 文章目录 一. 题目二.解题思路三.题解代码Python题解代码JAVA题解代码C/C++题解代码JS题解代码四.代码讲解(Ja…

34-4 CSRF漏洞 - CSRF跨站点请求伪造

一、漏洞定义 CSRF(跨站请求伪造)是一种客户端攻击,又称为“一键式攻击”。该漏洞利用了Web应用程序与受害用户之间的信任关系,通过滥用同源策略,使受害者在不知情的情况下代表攻击者执行操作。与XSS攻击不同,XSS利用用户对特定网站的信任,而CSRF则利用了网站对用户网页…

HiveSQL如何生成连续日期剖析

HiveSQL如何生成连续日期剖析 情景假设: 有一结果表,表中有start_dt和end_dt两个字段,,想要根据开始和结束时间生成连续日期的多条数据,应该怎么做?直接上结果sql。(为了便于演示和测试这里通过…

C++:MySQL的事务概念与使用(四)

1、事务的概念 定义:事务是构成单一逻辑工作单元的操作集合,要么完整的执行,要么完全不执行。无论发生何种情况,DBS必须保证事务能正确、完整的执行。 性质:事务的四大ACID性质。 原子性(Atomicity):一个事…

2.网络编程-HTTP和HTTPS

目录 HTTP介绍 HTTP协议主要组成部分 GET 和 POST有什么区别 常见的 HTTP 状态码有哪些 http状态码100 HTTP1.1 和 HTTP1.0 的区别有哪些 HTTPS 和 HTTP 的区别是什么 HTTP2 和 HTTP1.1 的区别是什么 HTTP3 和 HTTP2 的区别是什么 HTTPS的请求过程 对称加密和非对称…

甘特图在生产进度管理中的应用

生产进度管理在生产制造过程中起着至关重要的作用。 它主要关注对生产进程的掌控和安排,确保生产活动能够按照预定的计划和时间顺利进行,以达到按时交付产品的目标。 在生产进度管理中,首先需要制定一个详细且合理的生产计划,明…

Advanced RAG 02:揭开 PDF 文档解析的神秘面纱

编者按: 自 2023 年以来,RAG 已成为基于 LLM 的人工智能系统中应用最为广泛的架构之一。由于诸多产品的关键功能(如:领域智能问答、知识库构建等)严重依赖RAG,优化其性能、提高检索效率和准确性迫在眉睫&am…

STM32智能家居小助手

​ 设计的目的 大部分家用电器开关仍旧是传统的机械式按键开关,原因是传统式的电器开关开发周期短,制作成本低,方案成熟,但是传统的遥控家电开关已经不能满足人们对家电控制的要求,传统的遥控器具有单一性,…

Opencv-视频的读取

0. 写在前面 此篇博文主要记录使用Opencv4系列对视频的读取功能。 1. 视频的读取 cv::VideoCapture类是读取视频的,cv::VideoCapture既支持视频问价的读取,也支持从视频捕获的文件中读取视频数据,像笔记本的自带摄像头,外接USB的…

类脑计算芯片:机器学习的新硬件革命

热爱编程的小落… 🕊️系列专栏:🖼️ 零基础学Java——小白入门必备🔥 重识C语言——复习回顾🔥 计算机网络体系———深度详讲 HCIP数通工程师-刷题与实战🔥🔥🔥 微信小程序开发——…

初识Java中的NIO

1.概述 Java NIO 全称java non-blocking IO ,是指 JDK 提供的新 API。从 JDK1.4 开始,Java 提供了一系列改进的输入/输出新特性,被统称为 NIO(即 New IO),是同步非阻塞的。NIO采用内存映射文件的方式来处理输入输出,NI…

Linux Shell:`awk` 命令

Linux Shell:awk 命令 awk 是一种强大的文本分析工具,广泛用于文本处理、数据提取和报告生成。它使用自己的编程语言来处理文件中的数据。在 Linux Shell 中,awk 命令能够执行复杂的模式匹配、编辑和分析任务。本文将介绍 awk 的基础用法、高…

激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍

激光雷达和相机的联合标定工具箱[cam_lidar_calibration]介绍 写在前面安装过程调试过程标定成功可视化展示 写在前面 激光雷达和相机联合标定工具 论文地址:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9564700 github地址: https://github.com…