Linux课程四课---Linux开发环境的使用(gcc/g++编译器的相关)

news2024/11/15 22:27:13

作者前言

🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
​🎂 作者介绍: 🎂🎂
🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
🎂作者id:老秦包你会, 🎂
简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
喜欢学习C语言、C++和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
🎂个人主页::小小页面🎂
🎂gitee页面:秦大大🎂
🎂🎂🎂🎂🎂🎂🎂🎂
🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂


gcc/g++编译器

  • **作者前言**
  • 快速认识一下
  • 程序编译的过程
    • 动静态标准库----链接
      • 动态库
      • 静态库

快速认识一下

C语言推荐gcc
c++语言推荐g++
两者的差别不大主要
c++语言:
在这里插入图片描述
C语言
在这里插入图片描述

程序编译的过程

我们大概知道 C语言 ->汇编语言->二进制,
在这里插入图片描述
这个只是大概说明了先有语言再有编译器,由于各种原因,这些编译器可能就不是用这些语言来写的了

预处理

  1. 头文件展开
  2. 去注释
  3. 宏替换
  4. 条件编译
    我们知道在头文件进行写入条件编译主要就是防止头文件重复包含
    这个过程只是进行一系列操作,语言没有改变
gcc -E code.c -o code.i

编译
C语言翻译成汇编语言

gcc -S code.i -o code.s

汇编
汇编语言翻译成二进制

gcc -c code.s -o code.o

需要注意的是这个code.o文件不是可执行文件,不能执行
链接

gcc code.o -o code

执行code文件就可以了

./code

动静态标准库----链接

我们可以使用下面指令,可以查看code文件用到了哪些库

ldd code

在这里插入图片描述
Linux中的c标准库就是libc.so.6
不同的系统的库的后缀是不太一样的

在这里插入图片描述
在linux 系统下安装了C语言的头文件

ls /usr/include/

在这里插入图片描述
也安装了C标准库

ls /lib64/linc

在这里插入图片描述
如果平台要支持开发就要提前在系统中安装语言头文件库文件

简单的理解就是动静态库本身就是一个文件,头文件也是文件

在这里插入图片描述
这个图可以帮助我们理解动态库的使用,你是一名学生,你的作业就是执行代码,但是你需要上网才能完成作业,但是你不知道网吧地址,可是学长告诉你了,你就会去这个地方去上网,上完网后,你就会回来继续写作业,直到完成,
而静态库的就是我们链接的时候我们把需要用到的方法直接拷贝到可执行程序,不受静态库的影响,哪怕静态库出来问题也不影响可执行程序。
简单的理解就是允许我们拷贝的库就是静态库,允许我们链接的就是动态库

平时我们使用的函数也称为库函数

动态库

大致意思:在程序链接的时候只是作些标记(地址),然后在程序开始启动运行的时候,动态地加载所需库(模块)也是就通过地址找到对应的模块,
优点

  1. 节省资源(包括内存、网络…等资源),不会出现重复代码(只要没有重复,所有的花费都是必要的)

缺点:

  1. 对库的依赖性比较强,一旦库丢失,所有使用这个库的程序就会无法允许

例子:

gcc code.c -o code.out
ldd code.out
file code.out

在这里插入图片描述

静态库

大概:只用于链接生成可执行文件阶段。链接器会将程序中使用到函数的代码从库文件中拷贝到应用程序中,一旦链接完成生成可执行文件之后,在执行程序的时候就不需要静态库了

优点

  1. 不依赖库,同类型平台中都可以运行使用

缺点

  1. 可执行程序体积比较大,比较浪费资源

如果没有安装过静态库就会报错
在这里插入图片描述
ld就是链接器

我们需要先安装C语言静态库

sudo yum install glibc-static

c++的静态库就是

sudo yum install libstdc++-static

然后进行文件链接就可以了

gcc Newcode1.c -o newcode_static -static

可以看到我们使用ldd指令查看链接的库,可以发现,链接的是静态库
在这里插入图片描述
在这里插入图片描述
这个图也可以说明,同一个文件进行不同的链接,大小会改变,静态链接的可执行文件的大小更大

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

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

相关文章

[VSCode插件] 轻量级静态博客 - MDBlog

MDBlog VSCode插件,基于Markdown的轻量级静态博客系统,同时支持导出为可以部署的静态博客。 仓库 MDBlog 1. Features 博客基础功能:分类管理、文章管理、自动生成索引快捷指令:快捷输入表格、mermaid、wavedrom、代码块发布&a…

Photoshop 2023:重塑创意,引领数字艺术新纪元

在数字艺术的浩瀚星空中,Adobe Photoshop 2023(简称PS 2023)如同一颗璀璨的新星,为Mac和Windows用户带来了前所未有的创意体验。这款强大的图像处理软件不仅继承了前作的精髓,更在细节上进行了诸多创新,让每…

前端el-date-picker传递的日期格式不是自己想要的格式

解决方法: 添加format和value-format属性进行解决。 format“YYYY-MM-DD” value-format“YYYY-MM-DD” 注意:日期格式要用大写!!!!用小写会出现错误,不能回填选择的日期,会直接传入…

【 buuctf-swp】

wget 是什么东西呢? 那就直接过滤 http 流,并全部导出,点击 save all在导出来的一大堆里发现个 zip,需要输入密码,macOS 一大特点就是,如果是伪加密,随便输入一个密码就可以解压缩,…

Redis7 实现持久化的三种方式

1、概述 1.1、Redis持久化的重要性 数据恢复:Redis是一个内存数据库,如果系统或服务宕机,内存中的数据将会丢失。Redis的持久化机制可以把数据保存到磁盘上,以便在系统重启后恢复数据。这是Redis持久化最基本也是最重要的功能。…

基于阿里云OSS上传图片实战案例

一、案例描述 基于Springboot框架实现一个上传图片到阿里云服务端保存的小案例。 二、准备工作 基于Springboot免费搭载轻量级阿里云OSS数据存储库(将本地文本、照片、视频、音频等上传云服务保存)-CSDN博客 三、代码 新建这两个类:一个…

MySQL:开始深入其数据(四)select子查询

select眼熟吧?(都三节了) 又开始学习了 在 MySQL 中,子查询(subquery)是指在一个查询内嵌套另一个完整的 SELECT 语句。子查询可以嵌套在 SELECT、INSERT、UPDATE、DELETE 语句中,用于从内部查询结果中获取数据,进而完…

新加坡大带宽服务器概览

随着全球互联网的迅猛发展,服务器作为支撑网络应用的重要基础设施,扮演着越来越重要的角色。新加坡,作为亚洲四小龙之一,其服务器市场也备受关注。特别是新加坡的大带宽服务器,更是受到了众多企业和个人的青睐。那么&a…

LeetCode -- 79.单词搜索

1. 问题描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水…

SNAP:如何批量预处理Sentinel2 L2A数据集并输出为TIFF文件?

我的需求 我目前就是希望下载哨兵2号数据,然后在SNAP中进行批量提取真彩色波段并输出为TIFF文件。 数据集下载说明 目前哨兵网站似乎进行了一大波更新,连网站都换了,网址如下: https://dataspace.copernicus.eu/ 打开后界面如…

Linux课程四课---Linux开发环境的使用(自动化构建工具-make/Makefile的相关)

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 ​🎂 作者介绍: 🎂🎂 🎂 🎉🎉&#x1f389…

C++进阶(三) 二叉搜索树

一、二叉搜索树 1.1 二叉搜索树概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节…

【论文】A Survey of Monte Carlo Tree Search Methods阅读笔记

本文主要是将有关蒙特卡洛树搜索的文献(2011年之前)进行归纳,概述了核心算法的推导,给出了已经提出的许多变化和改进的一些结构,并总结了MCTS方法已经应用于的博弈和其他领域的结果。 蒙特卡洛树搜索是一种通过在决策…

Java 石头剪刀布小游戏

一、任务 编写一个剪刀石头布游戏的程序。程序启动后会随机生成1~3的随机数,分别代表剪刀、石头和布,玩家通过键盘输入剪刀、石头和布与电脑进行5轮的游戏,赢的次数多的一方为赢家。若五局皆为平局,则最终结果判为平局。 二、实…

深入理解与应用工厂方法模式

文章目录 一、模式概述**二、适用场景****三、模式原理与实现****四、采用工厂方法模式的原因****五、优缺点分析****六、与抽象工厂模式的比较**总结 一、模式概述 ​ 工厂方法模式是一种经典的设计模式,它遵循面向对象的设计原则,特别是“开闭原则”&…

一文扫盲:室内导航系统的应用场景和技术实现(入门级)

hello,我是贝格前端工场,之间搞过一些室内导航项目,有2D也有3D的,算是有些经验,这里给大家分享一下室内导航的基本尝试,欢迎老铁们点赞、关注,如有需求可以私信我们。 一、室内导航是什么 室内…

vs报错1168链接错误——关于:LNK1168 无法打开 E:\VS\文件名\x64\Debug\文件名. 进行写入问题的解决方法

关于这个问题我在网上找了一些方法。 有些方法解决了这个问题, 但是有点麻烦, 有些方法可能不能解决问题。 这里我先把我在网上找到的方法写出来: 第一种方法是可能开着一个程序,就是这个终端。有的时候报错1168是因为你没有关这…

Vue中如何实现动态路由?

在前端开发中,Vue.js 是一个极为流行的 JavaScript 框架,提供了灵活性和易用性,使得开发者可以快速构建单页面应用(SPA)。在 Vue 中,我们经常需要处理动态路由的情况,比如根据用户的操作或者权限…

设计模式 (四) -简单工厂模式

请直接看原文:设计模式(四)简单工厂模式 | BATcoder - 刘望舒 (liuwangshu.cn) --------------------------------------------------------------------------------------------------------------------------- 1.简单工厂模式简介 定义 简单工厂…

chrome选项页面options page配置

options 页面用以定制Chrome浏览器扩展程序的运行参数。 通过Chrome 浏览器的“工具 ->更多工具->扩展程序”,打开chrome://extensions页面,可以看到有的Google Chrome扩展程序有“选项Options”链接,如下图所示。单击“选项Options”…