Linux下文件编译器-GCC/G++

前言

本文介绍了c/c++的编译过程以及gcc/g++的时使用 

一.c/c++翻译的本质:将高级语言翻译成二进制

1)程序翻译过程:

(1)预处理(头文件展开、宏替换、去注释、条件编译)还是C语言代码

​        头文件展开:将头文件内容拷贝到源文件代码里面

​        条件编译:根据不同的宏定义进行编译、在预处理阶段会根据条件对代码进行裁剪

在gcc进行编译的时候,可使用-D选项传递不同的宏值

观察到main函数里面代码只剩下一行,剩下的被裁剪掉了

(2)编译(转为汇编语言)汇编文件

(3)汇编(汇编转为二进制)可重定位二进制文件

(4)连接()

二.gcc/g++的使用

1.默认编译

gcc/g++ 文件名

将源文件生成默认命名为a.out的可执行程序

2.指定名称

gcc/g++ 源文件名 -o 可执行程序名 或者 gcc/g++ -o 可执行程序名 源文件名

3.从现在开始翻译,到预处理截至

gcc -E 源文件 -o 预处理后文件.i

4.从现在开始翻译,到编译后截至

gcc -S 文件 -0 编译后文件.s

5.从现在开始翻译,到汇编后截至

gcc -c 文件名 -o 汇编后文件.o

6.从现在开始翻译,到连接后截至

gcc 文件名 -o 可执行文件名

生成可执行程序

7.查看可执行程序依赖的库

ldd 可执行程序名

 三、动静态库的理解——链接

Linux下面动态库后缀为.so,静态库后缀为.a

windows下面动态库后缀为.dll,静态库后缀为.lib

动静态库本质都是文件,头文件也是文件

1)动态库

被所有使用者共享,一旦确实,所有使用者都无法运行

优点:可以较大的节约资源,包括磁盘、内存、网络等,在更新时不需要重新编译整个程序,只需要把对应的动态库更换即可。

缺点:一旦缺失一个动态库,所有的程序都无法运行。

2)静态库

将运行所需要的代码拷贝一份到所执行程序中。

优点:独立性高,丢失一份不会影响其他程序的正常运行

缺点:会造成较大的资源浪费,且如果函数库更新,需要重新编译整个程序

通过比较可以看到,静态链接得到的可执行程序比动态链接得到的可执行程序大得多

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

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

相关文章

ad9361 CTRL_OUT0~7对应能读到的状态

ad9361 CTRL_OUT对应能读到的状态

新手小白如何投放知乎信息流广告推广?

随着越来越多的企业开始寻求更有效的方式来触达目标客户,知乎作为一个集知识分享、社交互动于一体的平台,已经成为众多品牌青睐的广告投放渠道之一。特别是知乎的信息流广告,因其高度融合的内容形式和精准的目标用户定向,成为了品…

《计算机网络》(第8版)第五章 运输层 复习笔记

第五章 运输层 一、运输层协议概述 1 运输层的功能 从通信和信息处理角度讲,传输层向应用层提供服务,是面向通信的最高层,也是面 向用户功能的最底层,它的主要功能有: (1)提供用户进程之间的逻…

HTML基础1-文本级元素

HTML 简介 什么是 HTML? HTML (HyperText Markup Language) 是一种用于创建网页的标准标记语言。它通过使用一系列预定义的元素来描述文档的结构和外观, 您可以使用 HTML 来建立自己的 WEB 站点。 HTML 的作用 HTML 用于定义网页的结构,…

Openwrt接UVC摄像头丢帧分析

Openwrt接UVC摄像头,使用mjpg-streamer,此处默认已经移植成功。这里以Skylab的SKW99为例进行说明,SKW99为高通QCA9531的方案,CPU的频率为650MHz。最近在应用过程中,需求完成后,发现视频码流下降了&#xff…

入门 PyQt6 看过来(案例)16~ 竖状菜单

本文依照上一篇文章进行简单的拓展,做一个竖状的堆栈菜单。效果如下: ​ 首先我们先进行分析以,页面左侧是菜单栏,按照堆栈式列表展示,包含基本信息和编程语言(仔细的你是否发现路老师文字写错了&#xff1…

【数据结构】链式二叉树的实现和思路分析及二叉树OJ

【数据结构】链式二叉树的实现和思路分析及二叉树OJ 🔥个人主页:大白的编程日记 🔥专栏:数据结构 文章目录 【数据结构】链式二叉树的实现和思路分析及二叉树OJ前言一.链式二叉树的定义及结构二.链式二叉树的遍历2.1前序遍历2.2中…

汇昌联信数字做拼多多运营实力强吗?

拼多多作为中国领先的电商平台之一,其运营实力一直是业界关注的焦点。汇昌联信数字公司作为一家专注于电商运营的企业,其在拼多多平台上的表现如何,是否具备强大的运营能力,是本篇文章探讨的主题。 一、答案是肯定的,汇…

C++高性能通信:图形简述高性能中间件Iceoryx

文章目录 1. 概述2. 支持一个发布者多个订阅者2.2 Iceoryx为何不支持多个发布者发布到同一个主题 3. Iceoryx的架构和数据传输示意图3.1 发布者与订阅者的通信机制3.2 零拷贝共享内存通信机制 4. 使用事件驱动机制4.1 WaitSet机制4.2 Listener机制 5. 已知限制6. 参考 1. 概述 …

Python .whl 独立安装和全部依赖安装命令

以安装 Flask 为例: 1. 独立安装 pip install whl_files/Flask-1.1.2-py2.py3-none-any.whl 2. 安装 Flask 全部依赖包和自己 cd /path/to/flask/1.0 pip install --no-index --find-links/path/to/downloaded/files Flask1.1.2 cd /path/to/flask/2.0 pip install …

批量输出文件夹内所有文件名和文件——vba实现

导出一个文件夹下所有文件名,可用vba插件实现,如图 如下图,已在桌面生成一个txt文本,但此方法只可输出一级目录下的文件,若输出所有文件,则需修改插件代码 (若想导出硬盘下所有文件和文件夹&…

网络通信HTTP

学习内容 这是昨日学习内容,之后花费昨晚和今天一整天的时间做了个小项目 项目:基于网络爬虫的天气查询系统 其中用了cJSON库来解析相关内容,感兴趣的朋友也可以做一做

SM2在线解密工具

SM2加密算法,采用公钥加密、私钥解密,在上一篇文章提到SM2加密工具,对应的这里再次提供SM2的在线解密工具 在线SM2解密工具 这个工具非常强大,不管什么加密模式都能无需指定的直接解密。

yolov10在地平线旭日X3派上的部署和测试(Python版本和C++版本)

0、搭建开发环境 当前的测试根据一下的步骤并修改源码是可以实现yolov8的板端运行,如果不想再搭建环境和测试代码bug上浪费更多的时间可以直接获取本人的测试虚拟机,所有的测试代码、虚拟环境和板端测试工程以全部打包到了虚拟机,需要的可以…

MLP多层感知机与Pytorch实现

参考文章: 1.动手学深度学习——多层感知机(原理解释代码详解)_多层感知机 代码-CSDN博客 2.4.1. 多层感知机 — 动手学深度学习 2.0.0 documentation 3.深度理解多层感知机(MLP) | 米奇妙妙屋 1. 神经网络由来 神经网…

Qt Designer的尺寸策略学习笔记

在 PySide6(或者 PyQt6)中,小部件的 sizePolicy 主要用于控制小部件在布局中的行为,特别是在调整窗口大小时。sizePolicy 由两个主要策略组成:水平策略和垂直策略。它们可以进一步细分为伸展、固定、最小、最大等类型。…

FP分数规划在无线通信中的应用(II)

3. 具体例子 3.1-3.3都只需要用第一章concave-convex方法求解,3.4-3.6需要用到第二章的拉格朗日对偶变换,而且具体解 x \mathbf{x} x时需要对离散变量单独开发算法。 3.1 多小区SISO能量分配 第一个例子是具有一组单天线基站(BSs&#xff…

网工内推 | 合资公司、上市公司数据库工程师,OCP/OCM认证优先,双休

01 欣旺达电子股份有限公司 🔷招聘岗位:数据库管理高级工程师 🔷岗位职责: 1、负责数据库规划、管理、调优工作; 2、负责数据库应急预案制定、应急预案维护和应急支持; 3、负责数据库异常处理&#xff…

TwinCAT3 创建变量并链接

文章目录 右键 PLC 选择添加新项 选择 Standard PLC Project,并把名称改成英文,例如下图中的‘test’ 双击 POUs 文件下的 MAIN 开始编程,编辑一段简单的程序,输入导通输出 程序写好后右键 test Project,选择 Bu…

【Unity渲染】Drawcall优化:利用GPU高效渲染大量动画角色

在游戏开发中,创建一个充满活力和真实感的游戏世界是至关重要的。Render-Crowd-Of-Animated-Characters是一个专注于高效渲染大量动画角色的项目,它通过优化技术和算法,使得在Unity中渲染动画角色群集变得更加高效和可行。 项目概述 这个项…