gcc/g++的使用:

news2025/1/8 5:21:42

目录

(1). 程序的翻译过程

预处理: gcc -E 源文件

编译: gcc -S 源文件

汇编:gcc -c 源文件

连接:

(2) 语言的自举(也叫 编译器的自举):

(3). 查看可执行程序在连接时依赖的库:  ldd  可执行程序的名字 。

(4). 函数库: 函数库一般分为 静态库 和 动态库

(5). 连接方式: 动态连接 , 静态连接。

(6). 编译:gcc 对 文件进行编译后, 生成的是可执行程序


(1). 程序的翻译过程

预处理(进行宏替换) , 编译(生成汇编) , 汇编(生成机械可执行代码) , 连接(生成可执行文件/库文件)

gcc的选项是 E , S ,c

预处理: gcc -E 源文件

gcc -E code.c -o test.i :  生成 预处理后的文件 test.i

预处理后文件中的内容还是c语言

编译: gcc -S 源文件

gcc -S  test.i -o  test.s : 生成 编译后的文件 test.s

开始进行程序的翻译, 形成汇编。此时 文件中的是 汇编代码

汇编:gcc -c 源文件

gcc  -c  test.s  -o  test.o : 生成 可重定位目标文件 test.o

文件中的内容是 二进制内容

连接:

gcc  -o  test  test.o  : 生成可执行程序

连接是 把 xxx.o 文件 和 标准库 进行关联, 构建可执行程序

-static 选项: 进行静态连接。 不加-static 默认是动态连接。

gcc -o  test_static  test.o  -static

(2) 语言的自举(也叫 编译器的自举):

先有汇编语言 还是先有 汇编编译器? 答案是先有汇编编译器。  先用二进制 写一个 编译器 ,该编译器可以使得 汇编语言 翻译为 二进制(称这个为 二进制编译器)。 然后拿 汇编语言 来写一个 新的汇编编译器, 然后用 二进制编译器 , 编译形成一个全新的编译器。 这个过程叫做 语言的自举,也叫做 编译器的自举

(3). 查看可执行程序在连接时依赖的库:  ldd  可执行程序的名字 。

此处的libc.so.6 是 test 可执行程序 依赖的库。  Libc.so.6 是 c语言标准库

如下图,ls命令 也依赖 libc.so.6库,证明 ls命令也是c语言写的。

一般命名中包含 .so 或以 .so 结尾 的库 是动态库。 显然 libc.so.6 就是一个动态库。

(4). 函数库: 函数库一般分为 静态库 和 动态库

动态库: .so (Linux) , .dll (windows)

静态库: .a (Linux) , .lib (windows)

云服务器默认没有按照c/c++的标准库的静态库

安装c语言静态库: yum install -y glibc-static

安装c++静态库: yum install -y libstdc++-static

(5). 连接方式: 动态连接 , 静态连接。

静态连接的前提: 有静态库

静态连接: 把我们要访问的方法实现,拷贝到我们自己的可执行程序中

i. 静态连接的优点:不依赖其他库,即使库丢失也无所谓,照样可以运行

ii. 静态连接的缺点:比较浪费资源。 形成的可执行程序的体积较大

动态连接的前提: 有动态库

动态连接: 记录我们要访问的方法实现的地址,访问时,通过地址跳转到对于地址来访问方法

i. 动态连接的优点: 比较节省资源。 形成的可执行程序的体积比较小

ii. 动态连接的缺点: 一旦动态库缺失,所有程序都无法执行。 即如果 libc.os.6 删除后,就无法运行用c语言写的程序了

查看文件是静态连接还是动态连接的方法: file 命令。 语法: file  文件名

即 dynamically  linked (uses  shared  libs) 是动态连接。 statically  linked 静态连接

(6). 编译:gcc 对 文件进行编译后, 生成的是可执行程序

选项: -o ,  相当于是 将程序 生成为文件 并指定名称

gcc  编译并生成文件的语法:

gcc  -o  生成的文件的名字   源文件  , 也可以写为  gcc 源文件 -o 生成的文件的名字

是把源文件 进行编译,然后把 编译后的可执行程序 命名为 此处的可执行程序的名字

然后执行可执行程序即可。

Eg:

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

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

相关文章

C语言 | Leetcode C语言题解之第414题第三大的数

题目&#xff1a; 题解&#xff1a; int cmp(const void *a, const void *b) {return *(int*)a < *(int*)b; }int thirdMax(int* nums, int numsSize){qsort(nums, numsSize, sizeof(nums[0]), cmp);int diff 0;for (int i 1; i < numsSize; i) {if (nums[i] ! nums[i…

体感魂斗罗-开篇

文章目录 前言新的目标Flag 前言 黑神话悟空大火&#xff0c;9月14&#xff0c;周鸿祎在抖音平台分享了360团队用两天的业余时间将《黑神话&#xff1a;悟空》爆改为体感游戏的过程&#xff0c;通过身体动作来控制游戏中的角色&#xff0c;实现更加自然和直观的操作方式。 把…

【秋招笔试-支持在线评测】8.28华为秋招(已改编)-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 华为专栏传送🚪 -> 🧷华为春秋招笔试 目前今年秋招的笔…

Golang | Leetcode Golang题解之第414题第三大的数

题目&#xff1a; 题解&#xff1a; func thirdMax(nums []int) int {var a, b, c *intfor _, num : range nums {num : numif a nil || num > *a {a, b, c &num, a, b} else if *a > num && (b nil || num > *b) {b, c &num, b} else if b ! ni…

直播标准权威发布,阿里云RTS获首批卓越级评估认证

近期举办的2024“可信云大会”上&#xff0c;中国信通院正式发布了2024年上半年音视频领域最新评估结果。阿里云超低延时直播&#xff0c;以首批卓越级&#xff0c;通过中国信通院超低延时直播性能及服务质量分级测试。 标准发布&#xff0c;权威量化直播体验质量 从直播元年发…

如何通过 4 种方法恢复 Mac 上删除/未保存的 Excel 文件

您花了数小时在 MacBook 上处理 Excel 工作簿&#xff0c;但现在它不见了。或者&#xff0c;当您退出 Excel 文件时&#xff0c;您无意中选择了“不保存”。这是否意味着您的所有努力都白费了&#xff1f;本文系统地解释了如何在 Mac 上恢复丢失的 Excel 文件。使用我们的 4 种…

Unity项目的脚本继承关系

1.Unity项目的脚本继承关系包括四层&#xff1a;自己的脚本、MonoBehaviour、Behaviour、Component、Object。 2.通过F12跳转可以查看各继承类中的方法和属性&#xff0c;如MonoBehaviour类中主要包括协程和相关API。 3.Component类中包含组件的只读属性、消息发送等API&…

实景三维助力工程建设项目智慧选址

随着科技的不断进步&#xff0c;实景三维技术已经成为城市规划和工程建设中不可或缺的一部分。它通过高精度的地理信息数据&#xff0c;为工程建设项目提供了智慧选址的新思路。 1. 实景三维技术简介 实景三维技术&#xff0c;是一种利用遥感、地理信息系统&#xff08;GIS&a…

linux环境编程

linux一切皆文件&#xff08;除了网口&#xff09; 内核链表&#xff1a;通过内核链表进行管理&#xff0c;所有一切皆文件 系统io&#xff08;open&#xff0c;read&#xff0c;close&#xff09; open 查看命令&#xff1a;man 2 open 头文件&#xff1a; #include <s…

【入门】配置 Java 应用程序的完整指南

前言&#xff1a; Java 是一种广泛使用的编程语言&#xff0c;具备跨平台的特性&#xff0c;使得其应用程序可以在多种环境中高效运行。本文将介绍如何将 Java 应用程序从开发环境部署到生产环境&#xff0c;确保其能够稳定、稳定地运行运行。 确定运行环境 Java程序可以运行…

vue 案例使用

el-switch 按键的使用 <el-switchclass"switchStyle" v-model"boolValue" :active-value"1" :inactive-value"0" active-text"ON" inactive-text"OFF" active-color"#13ce66" inactive-color&qu…

基于 PyQt5 和 OpenCV 进行图像处理操作的GUI工具初版

为了实现一个基于 PyQt5 和 OpenCV 的图形用户界面&#xff08;GUI&#xff09;&#xff0c;要求如下&#xff1a; 左边显示加载的图片。 中间提供各种对图片进行处理的操作方法&#xff08;如灰度化、模糊处理等&#xff09;。 右边显示处理后的效果图。 接下来我将详细讲解如…

数据结构_1、基本概念

1、基本概念 数据&#xff1a;是信息的载体&#xff0c;是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料。 数据元素&#xff1a;数据元素是数据的基本单位&#xff0c;通常作为一个整体进行考虑和处理…

Python 3:强大而灵活的编程语言

Python 3&#xff1a;强大而灵活的编程语言 一、Python 3 概述 &#xff08;一&#xff09;发展历程 Python 的作者是荷兰人 Guido von Rossum&#xff0c;1982 年&#xff0c;Guido 从阿姆斯特丹大学获得了数学和计算机硕士学位。1989 年&#xff0c;为了打发圣诞节假期&…

【Hot100】LeetCode—32. 最长有效括号

目录 1- 思路题目识别动态规划 2- 实现⭐32. 最长有效括号——题解思路 3- ACM 实现 原题链接&#xff1a;32. 最长有效括号 1- 思路 题目识别 识别1 &#xff1a;给定一个字符串 s &#xff0c;求解 s 中的最长有效括号 动态规划 动态规划五部曲 递推公式难如果遇到了 s.…

【数一线性代数】007入门

Index 本文稍后补全&#xff0c;推荐阅读&#xff1a;https://blog.csdn.net/weixin_60702024/article/details/140939599分析实现总结 本文稍后补全&#xff0c;推荐阅读&#xff1a;https://blog.csdn.net/weixin_60702024/article/details/140939599 用两个栈来实现一个队列…

回归预测|2024年2月最新优化算法角蜥优化HLOA|基于角蜥优化BP神经网络数据回归Matlab程序HLOA-BP【优化效果好】

回归预测|2024年2月最新优化算法角蜥优化HLOA|基于角蜥优化BP神经网络数据回归Matlab程序HLOA-BP【优化效果好】 文章目录 一、基本原理1. 角蜥优化算法&#xff08;HLOA&#xff09;简介2. BP 神经网络&#xff08;BP Neural Network&#xff09;简介3. HLOA-BP 回归预测流程总…

渗透测试入门学习——php表单form与POST、GET请求练习

最终效果&#xff1a; 必填项为空报错提示&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>php表单练习</title> </head> <body> <?php//php中的…

【他山之石】优化 JavaScript 的乐趣与价值(上)

前言 这是前几天偶然看到的一篇硬核推文。作者一口气分了 12 个主题探讨了 JavaScript 在优化时应该注意的要点&#xff0c;读后深受启发。由于篇幅较长&#xff0c;分两篇发表。本篇为上篇。 文章目录 Optimizing Javascript for fun and for profit0. Avoid work1. Avoid str…

网络安全-LD_PRELOAD,请求劫持

目录 一、环境 二、开始做题 三、总结原理 四、如何防护 一、环境 我们这里用蚁剑自带的靶场第一关来解释 docker制作一下即可 二、开始做题 首先环境内很明显给我们已经写好了webshell 同样我们也可以访问到 我们使用这个蚁剑把这个webshell连上 我们发现命令不能执行&am…