【Linux】开发工具

news2024/9/20 21:41:30

目录

  • Linux编译器-gcc/g++使用
    • 执行命令:
    • 我们的.o和库是如何链接的?
  • make/Makefile
    • 依赖关系、依赖方法

Linux编译器-gcc/g++使用

gcc只能编译c语言,g++可以编译c语言也可以编译g++
背景知识:

  1. 预处理(进行宏替换)
  2. 编译(生成汇编)
  3. 汇编(生成机器可识别代码)
  4. 连接(生成可执行文件或库文件)

用vim写出代码后gcc运行

在这里插入图片描述

如果代码编译错误,会有语法提示:

在这里插入图片描述

代码编译成功后会产生一个可执行程序:

在这里插入图片描述


执行命令:

gcc 【文件名】:不加任何选项默认生成可执行程序
在这里插入图片描述


推荐写法:gcc 【源文件名】 -o 【自定义可执行程序名称】gcc -o【自定义可执行程序名称】【源文件名】:生成可执行程序并且可以自定义可执行程序名称,

-o的作用是将生成的可执行程序放到【自定义可执行程序名称】这个文件里去
在这里插入图片描述
在这里插入图片描述


gcc -E 【源文件名】-o【自定义可执行程序名称.i】:只进行预处理,将预处理之后的结果放到【自定义可执行程序名称】这个文件里去,

-E的作用是告诉gcc,从现在开始进行程序的翻译,将预处理工作做完就停下来,不要往后走了!

在这里插入图片描述


gcc -S 【源文件名】-o【自定义可执行程序名称.s】:进行程序的翻译,将预处理之后的结果放到【自定义可执行程序名称】这个文件里去,

-S的作用是告诉gcc,从现在开始进行程序的翻译,将编译工作做完,就停下来!

在这里插入图片描述


gcc -c 【源文件名】-o【自定义可执行程序名称.o】:进行程序的翻译,将预处理之后的结果放到【自定义可执行程序名称】这个文件里去,

-c的作用是告诉gcc,从现在开始进行程序的翻译,将汇编工作做完,就停下来!

.==o文件–》==可重定位目标二进制文件,简称目标文件,.obj文件不可以独立执行,虽然已经是二进制了需要经过 链接 才能执行
在这里插入图片描述

我们的.o和库是如何链接的?

1.动态链接
2.静态链接

库给我们提供方法的实现,方法的实现就是在库当中!
库其实就是把源文件(.C),经过一定的翻译,然后打包 – 只给你提供一个文件即可,不用给你提供太多的源文件,也可以达到隐藏源文件的目的。


在Linux中,编译形成可执行程序,默认采用的就是动态链接 – 提供动态库
查看是否使用动态库的指令ldd
在这里插入图片描述
查看是动态库还是静态库的指令file

在Linux中,如果要按照静态链接的方式,进行形成可执行程序,需要添加-static选项 – 提供静态库:gcc mycode.c -o 【自定义文件名】 -static
在这里插入图片描述

Linux中是没有安装静态库的,需要自己安装
C语言:sudo yum install -y glibcstatic
C++: sudo yum install -ylibstdc++-static

动态库因为是共享库,有效的节省资源(磁盘空间,内存空间,网络空间等)[优]
动态库一旦缺失,导致各个程序都无法运行[缺点]
静态库,不依赖库,程序可以独立运行[优点],
体积大,比较消耗资源[缺]

在这里插入图片描述
在这里插入图片描述

make/Makefile

make是一个命令
makefile是一个文件,当前目录下的文件

依赖关系、依赖方法

在这里插入图片描述

在这里插入图片描述
make会根据源文件和目标文件的新旧,判定是否需要重新执行依赖关系进行编译!(在文件内容和属性没有被修改的情况下,一般只会编译1次):
在这里插入图片描述

一定是源文件形成可执行,现有源文件,才有可执行,一般而言,源文件的最近修改时间 比 可执行文件要老的
如果我们更改了源文件,历史上曾经还有可执行,那么源文件的最近修改时间,一定要比可执行程序要新!

只需要比较,可执行程序的最近修改时间 和 源文件的最近修改时间
.exe 新于 .c 源文件是老的,不需要重新编译
.exe 老于 .c 源文件是老的,需要重新编译

查看文件的时间的指令stat 【文件】Modify:文件内容,Change:文件属性)
在这里插入图片描述

如果想要一直被执行:.PHONY(伪目标)

在这里插入图片描述
在这里插入图片描述


特殊符号:$@ $^
在这里插入图片描述


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

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

相关文章

我的Windows10下的WSL的使用经历

微软每年都会举办Build开发者大会,近年来越来越受关注的Linux 子系统Windows Subsystem for Linux(WSL)已经很完善了,我抱着体验一把的心态,也来使用一下这个功能。 各位新手Linux朋友们,有没有想过怎么在…

ubuntu18.4(后改为20.4)部署chatglm2并进行基于 P-Tuning v2 的微调

下载驱动 NVIDIA显卡驱动官方下载地址 下载好对应驱动并放在某个目录下, 在Linux系统中安装NVIDIA显卡驱动前,建议先卸载Linux系统自带的显卡驱动nouveau。 禁用nouveau 首先,编辑黑名单配置。 vim /etc/modprobe.d/blacklist.conf 在文件的最后添加…

Python实现【亚马逊商品】数据采集

亚马逊作为最大的跨境电商平台之一,其产品一直备受关注,因此采集亚马逊产品功能也是部分卖家所需的,下面我们来了解一下采集亚马逊产品是如何操作的。 l 采集网站 【场景描述】采集亚马逊搜索关键词出来的商品信息。 【入口网址】https://…

MES系统在工业生产中的重要性与功能

MES系统在工业生产中的重要性体现在它的信息化管理能力。传统的生产管理方法主要依靠人工操作和纸质文档记录,效率低下且容易出错。而MES系统利用计算机技术和数据库管理,能够实时记录和监控生产数据,提供准确的生产情况分析报告,…

2023年中国高尔夫服饰市场规模、主要品牌及行业发展方向分析[图]

高尔夫服饰是指高尔夫运动的专用服饰,高尔夫运动作为商务交流的手段和工具,具有较强的商务属性,高尔夫服饰除了具备专业功能属性以外,具备较强的时尚性,适合于商务、日常、休闲等多场景穿戴。高尔夫服饰里的主要类别&a…

快速上手视频下载助手:简单操作,高效下载你心仪的影片

在如今的社交媒体时代,视频已成为人们生活中不可或缺的一部分。微信视频号作为新兴的视频平台,吸引了越来越多的用户。然而,与其他视频平台相比,微信视频号并不支持视频下载功能,给用户带来了不便。但是,不…

React之Jsx如何转换成真实DOM

一、是什么 react通过将组件编写的JSX映射到屏幕&#xff0c;以及组件中的状态发生了变化之后 React会将这些「变化」更新到屏幕上 在前面文章了解中&#xff0c;JSX通过babel最终转化成React.createElement这种形式&#xff0c;例如&#xff1a; <div>< img src&q…

Vue 2 生命周期与 Vue 3 生命周期:介绍与差别对比

目录 引言&#xff1a; 一、Vue 2 生命周期介绍&#xff1a; 二、Vue 3 生命周期介绍&#xff1a; 注册周期钩子​ 生命周期图示 生命周期 三、Vue 2 生命周期与 Vue 3 生命周期的差别对比&#xff1a; 引言&#xff1a; Vue.js 是一款流行的 JavaScript 框架&#xff0…

仿真数字正弦波发生器程序

1&#xff09;构建这个IOC程序的程序框架&#xff1a; orangepiorangepi5:/usr/local/EPICS/program/simScope$ ls bin configure db dbd iocBoot lib Makefile simScopeApp2&#xff09;修改configure下RELEASE文件&#xff0c;添加所需的支持模块&#xff0c;此IOC程…

ThinkPad电脑HDMI接口失灵如何解决?

ThinkPad电脑HDMI接口失灵如何解决&#xff1f; 如果平时正常使用的外接显示器&#xff0c;某天突然无法使用了&#xff0c;重新插拔依然无信号的话&#xff0c;可以打开系统的设备管理器&#xff08;快捷键winx&#xff09;&#xff0c;首先看一下监视器的识别情况&#xff0c…

人声分离神仙网站,用过都说好~

在生活中好听的音乐有千千万的&#xff0c;音乐是非常容易可以找到下载下来的&#xff0c;但是背景音乐相当不容易找的&#xff0c;我们看的某短视频的背景音乐我们觉得不错的&#xff0c;想要下载下来的时候&#xff0c;我们都会无从下手不知道如何才可以找到这个相关的背景音…

内网渗透-内网信息收集

内网信息收集 前言 当我们进行外网信息收集&#xff0c;漏洞探测以及漏洞利用后&#xff0c;获得了主机的权限后&#xff0c;我们需要扩大渗透的战果时&#xff0c;这是我们就要进行内网的渗透了&#xff0c;内网渗透最重要的还是前期的信息收集的操作了&#xff0c;就是我们的…

文件加密丨最值得收藏的3种方法

信息的安全性变得越来越重要。文件加密作为一种有效的信息安全保护手段&#xff0c;广泛应用于各类场景。 今天就分享3种值得小白收藏的文件加密的方法&#xff1a; 方法一 简单加密 简单加密是一种常见的文件加密方法&#xff0c;其原理是通过使用简单的加密算法和密钥&…

YUV格式详解

YUV 可以将亮度信息&#xff08;Y&#xff09;与色度信息&#xff08;UV&#xff09;分离&#xff0c;没有UV信息一样可以显示完整图像&#xff0c;只不过是黑白的,也是一种颜色编码方法&#xff0c;&#xff0c;YUV和RGB可以通过公式互相转换&#xff0c;图片中每一个像素的颜…

响应式网站建站源码系统+完整的搭建教程

互联网已成为人们生活中不可或缺的一部分。在这个信息爆炸的时代&#xff0c;企业和个人对网站的需求不再仅仅是展示信息&#xff0c;而是要求网站能够适应各种设备、屏幕尺寸和网络环境&#xff0c;以便更好地与用户进行互动。因此&#xff0c;响应式网站建设应运而生&#xf…

使用Jenkins触发gitlab的webhook

满足条件&#xff1a; 首先手动构建可以完成构建 例如&#xff1a; 打开项目点击配置 在“Build Triggers”栏勾选&#xff0c;Build when a change is pushed to GitLab. GitLab webhook &#xff1b;如下 复制URL链接&#xff0c;我的链接是&#xff1a;http://192.168.44…

23款奔驰E300L升级几何多光束大灯 车辆自检等功能

奔驰几何多光束大灯核心特点就是通过内部的84颗可独立控制的LED光源&#xff0c;行车远光灯会甄别对向驶来的车辆或者行人&#xff0c;并且动态的跟随目标&#xff0c;之后阴影话该区域&#xff0c;避免晃到车辆和行人。 奔驰升级几何多光束 LED 大灯&#xff08;MULTIBEAM LED…

TypeError: data.reduce is not a function:数据类型不匹配

错误展示&#xff1a; 错误分析&#xff1a; 首先来看看前端代码&#xff1a;我表格绑定的数据模型是tableData&#xff0c;而我tableData定义的是一个数组 其次看看后端给的数据&#xff1a; 传递的是一个对象&#xff0c;而不是一个数组&#xff01; 这样原因就找出了&…

Spring如何使用三级缓存解决循环依赖问题?

Spring框架中采用了"三级缓存"&#xff08;三级缓存是一种缓存解决循环依赖的数据结构&#xff09;来解决循环依赖问题&#xff0c;其中缓存包括singletonObjects、earlySingletonObjects和singletonFactories。 第一级缓存 - singletonObjects&#xff1a; 在Spr…

Qt跨平台(统信UOS)各种坑解决办法

记录Qt跨平台的坑&#xff0c;方便日后翻阅。 一、环境安装 本人用的是qt 5.14.2.直接在官网下载即可。地址&#xff1a;Index of /archive/qt/5.14/5.14.2 下载linux版本。 下载之后 添加可执行权限。 chmod 777 qt-opensource-linux-x64-5.14.2.run 然后执行。 出现坑1…