【linux】编译器使用

news2024/12/22 4:26:16

目录

1. gcc ,g++ 编译器使用

a. 有关gcc的指令(g++同理)

2. .o 文件和库的链接方式

a. 链接方式

b. 动态库 和 静态库 优缺点对比

c. debug 版本 和 release 版本



1. gcc ,g++ 编译器使用

a. 有关gcc的指令(g++同理)

注意:

linux下自带gcc编译器,如果要安装g++编译器;

  • sudo yum install -y gcc-g++ (普通用户)

  • gcc + 文件名

得到可执行文件

  • gcc + 文件名 + -o + 自定义文件名

得到的可执行文件可以自己命名

  • gcc + E + 文件名 + -o + 自定义文件名 (一般以 .i 结尾)

得到预处理后的文件可以自己命名

注意:

-E 告诉编译器,从现在阶段开始执行完预处理阶段就可以停下来了

  • gcc -S + 文件名 + -o + 自定义文件名 (一般以 .s 结尾)

得到编译后的文件可以自己命名

注意:

-S 告诉编译器,从现在阶段开始执行完编译阶段就可以停下来了(得到的是汇编代码

  • gcc -c + 文件名 + -o + 自定义文件名 (一般以 .o 结尾)

得到汇编后的文件可以自己命名(得到的是二进制代码

注意:

  1. 得到的文件(可重定位目标二进制文件)不可以直接执行(缺少链接这一步
  2. 链接链接的是库文件 (Linux下:.so(动态库) .a(静态库),windows下:.dll(动态库),.lib(静态库))
  3. linux系统下,库有自己的命名规则:libname.so (红色标明的位置才是库的名字)
  4. 编译型语言,所谓的安装包,是安装了 头文件 + 库文件
  5. linux系统下,默认只安装了动态库,没有安装静态库
  6. 函数的实现就是调用了库文件,库文件就是源文件(.c)经过一定翻译后,形成的一个文件(可以打包多个源文件,也可以达到隐藏源文件的效果
  7. 头文件提供方法的声明,库文件提供方法的实现
  8. 头文件所处位置:/usr/include

2. .o 文件和库的链接方式

a. 链接方式

  1. 动态链接

动态库不能缺失,一旦对应的动态库缺失,影响的不止一个程序

  1. 静态链接

在编译器使用的时候,静态链接时,会将自己的函数拷贝到目标文件中,如果静态库缺失了,不会影响目标程序

注意:

  1. 在 Linux系统下,默认采用的链接是动态链接(需要提供动态库
  2. 动态库只能使用动态链接,静态库只能使用静态链接
  1. -static 选项

采用静态链接(需要提供静态库

注意:

  1. 安装 C语言 静态库(普通用户):
  • sudo yum install -y glibc-static

  1. 安装 C++ 静态库(普通用户)
  • sudo yum install -y libstdc++-static

  1. 如果只有动态库,没有静态库,-static 是不行的
  2. 如果没有动态库,只有静态库,那么只能用静态库 (本来编译器默认优先使用动态库,-static 是改变优先级,将所有的链接要求都改成静态链接,没有就会报错 )

b. 动态库 和 静态库 优缺点对比

  1. 动态库因为是共享库,可以节约资源(磁盘资源,内存资源,网络资源等)【优点】
  2. 动态库一旦缺失,目标程序很可能不能执行 【缺点】
  3. 静态库依赖小,缺失静态库不会对目标程序造成什么影响 【优点】
  4. 静态库体积大,资源消耗大 【缺点】

c. debug 版本 和 release 版本

注意:

  1. gcc 默认形成的可执行程序是以 release 版本发布出去的
  2. debug 版本 会比 release 版本 多加 debug 信息 ,所以体积上也会更大

  • gcc + 文件名 + -o + 目标文件名 + -g

形成的可执行文件是 debug版本 的

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

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

相关文章

CCF区块链会议--Middleware 2024 截止5.24 附录用率

会议名称:Middleware CCF等级:CCF B类会议 类别:软件工程/系统软件/程序设计语言 录用率:2022年录用率38%(8/21) Topics of Interest The Middleware conference seeks original submissions of resear…

销冠必备:高效跟进客户的四个技巧

作为一名销售,高效而精准地跟进客户是取得成功的关键。今天,我将分享四个技巧,让你也能够高效的跟进客户。 1、善于发问 通过多询问客户,你可以更好地了解客户的需求和痛点。在与客户交流时,不要只是简单地回答问题&…

SpringCloud基础 Consul的引入

前言 首先是为什么引入consul这个组件 我们知道微服务分为很多个模块,这里模块中相互调用,我使用硬编码的模式是不好的 比如微服务模块需要更新的时候,我们使用硬编码的方式可能需要修改很多个地方 但是使用consul之后,就引入了注册中心,我们只需要将对应的服务注册为节点 这样…

如何修复U盘在Windows 10上断开又重新连接的问题?这里有方法

序言 有时,当你把U盘连接到电脑上时,U盘每隔几秒钟就会断开连接并重新连接,这导致你无法正常复制和传输文件,这真的很烦人。硬件或驱动程序可能有问题。 在这种情况下,你需要确保此U盘与其他计算机是否正常工作。如果是,则表示你的驱动器没有问题。如果不是,不要担心。…

我们该如何看待AIGC(人工智能)

目录 AIGC的概述: AIGC的发展经历: AIGC的概述: [TOC]( 🚀文章目录) ---AIGC全称为AI-Generated Content,指基于生成对抗网络GAN、大型预训练模型等人工智能技术,通过已有数据寻找规律,并通过…

服务网关GateWay基础

1. 网关基础介绍1.1 网关是什么1.2 为啥要用网关1.3 常见的网关组件NginxNetflix ZuulSpring Cloud GatewayKongAPISIX综合比较 2. gateWay的使用2.1 springCloud整合gateway2.2 GateWay的相关用法2.3 GateWay路由使用示例基本用法转发/重定向负载请求动态路由 2.5 断言(Predic…

Rust腐蚀服务器定制地图开服

Rust腐蚀服务器定制地图开服 大家好我是艾西一个做服务器租用的网络架构师。Rust腐蚀这个游戏有很多的插件mod作者,在地图制作这一块也是一样,有些好玩的地图可能大家在map网站找到了但是不知道怎么操作设置那么今天艾西给大家说下特定定制地图怎么弄。…

L1-099 帮助色盲 - java

L1-099 帮助色盲 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB 栈限制 8192 KB 题目描述: 在古老的红绿灯面前,红绿色盲患者无法分辨当前亮起的灯是红色还是绿色,有些聪明人通过路口的策略是这样的:当红灯或绿灯亮起时&am…

性能测试工具三——perf + FlameGraph(采样测试)

1. 安装 sudo apt install linux-tools-common 如果没安装成功可尝试制定特定内核版本的工具,例如sudo apt install linux-tools-6.5.0-27-generic。 2. 使用perf Step1:编译得到可执行程序,假设是a.out。 Step2:执行类似如下指…

docker中的资源控制

前言 docker 使用cgrqup控制资源,K8S 里面也有limit(使用上限) docker通过cgroup来控制容器使用的资源配额,包括CPU、内存、磁盘三大方面,基本覆盖了常见的资源配额和使用量控制。 Cgroup 是 Control …

Ubuntu20.04安装 mysql8.0.32

检查删除原有的mysql(可以不做,自己记录) 1、 下载 MySQL :: Download MySQL Community Server (Archived Versions) wget https://cdn.mysql.com/archives/mysql-8.0/mysql-server_8.0.32-1ubuntu20.04_amd64.deb-bundle.tar 2、解压到指定目录下 tar xvf mysq…

CountDownLatch使用错误+未最终断开连接导致线程池资源耗尽

错误描述&#xff1a; 我设置了CountDownLatch对线程的协作做出了一些限制&#xff0c;但是我发现运行一段时间以后便发现定时任务不运行了。 具体代码&#xff1a; public void sendToCertainWeb() throws IOException, InterruptedException {List<String> urlList …

毕业设计注意事项(2024届更新中)

1.开题 根据学院发的开题报告模板完成&#xff0c;其中大纲部分可参考资料 2.毕设 根据资料中的毕设评价标准&#xff0c;对照工作量 3.论文 3.1 格式问题 非常重要&#xff0c;认真对比资料中我发的模板&#xff0c;格式有问题&#xff0c;答辩输一半&#xff01; 以word…

梯度下降法总是在同一点收敛吗?

梯度下降法总是在同一点收敛吗&#xff1f; 梯度下降法并不总是在同一点收敛。梯度下降法的收敛取决于多个因素&#xff0c;包括初始参数的选择、学习率的设置、损失函数的形状等。 以下是一些影响梯度下降法收敛行为的关键因素&#xff1a; 1.初始参数&#xff1a; 初始参数…

OFDM同步技术

文章目录 前言一、OFDM 同步技术二、MATLAB 仿真1、STO 估计技术①、核心源码②、仿真结果 2、CFO 估计技术①、核心源码②、仿真结果 三、资源自取 前言 本文对 OFDM 同步技术以思维导图的形式呈现&#xff0c;有关仿真部分进行了讲解实现。 一、OFDM 同步技术 OFDM 同步技术…

【GitHub】github学生认证,使用copilot教程

github学生认证并使用copilot教程 写在最前面一.注册github账号1.1、注册1.2、完善你的profile 二、Github 学生认证 &#x1f308;你好呀&#xff01;我是 是Yu欸 &#x1f30c; 2024每日百字篆刻时光&#xff0c;感谢你的陪伴与支持 ~ &#x1f680; 欢迎一起踏上探险之旅&a…

手机误删照片如何恢复?怎么快速有效找回照片?

现在手机的功能越来越强大&#xff0c;手机厂家不断内卷&#xff0c;拍照功能越来越强&#xff0c;我们已经习惯用手机来记录生活了&#xff0c;因此储存的照片都特别珍贵&#xff0c;一旦误删&#xff0c;就容易造成不可磨灭的损失。那么手机误删照片如何恢复&#xff1f;本文…

三招教你成为朋友圈运营高手,赶紧get起来!

朋友圈作为一个重要的营销推广渠道&#xff0c;是能够为我们带来很多收益的。今天就给大家分享朋友圈运营的三个技巧&#xff0c;快快Get起来吧&#xff01; 第一招&#xff1a;明确人设定位 要在朋友圈里脱颖而出&#xff0c;首先我们需要明确自己的人设定位。选择一个与自己…

小美打怪(动态规划)

小美在玩游戏&#xff0c;游戏中有 n 个怪物&#xff0c;怪物的血量为 h&#xff0c;攻击力为 ai​。小美的血量为 H&#xff0c;攻击力为 A&#xff0c;小美可以击败血量和攻击力都小于自己的怪物&#xff0c;并且打败后血量降为怪物的血量&#xff0c;攻击力降为怪物的攻击力…

react实现时钟翻牌效果

需求&#xff1a;随着数字的变动要求有时钟翻动动效 问题&#xff1a;只在加载时有动效 解决方案&#xff1a;通过判断数字改变&#xff08;这里通过新旧数值变动来判断&#xff0c;不贴代码啦&#xff09;&#xff0c;每次变动的时候手动把animationIterationCount设置为inf…