【linux】——gcc/g++,make/makefile的简单使用

news/2024/4/26 14:46:55/文章来源:https://blog.csdn.net/luoheng1114/article/details/129118024

目录

1.gcc的基本使用

2.Linux下的静态库和动态库的理解

3.Linux项目自动化构建工具——make/makefile


1.gcc的基本使用

gcc是专门用来编译c语言的

g++是专门用来编译c++的,但是g++也能够用来编译c语言

预处理(进行宏替换)

预处理功能主要包括宏定义,文件包含,条件编译,去注释等。
预处理指令是以#号开头的代码行。
实例: gcc –E hello.c –o hello.i
选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。(也就是只预处理完就停止)
选项“-o”是指目标文件,“.i”文件为已经经历过预处理的c原始程序。(生成的文件是预处理后的文件)
编译(生成汇编)
在这个阶段中,gcc 首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc 把代码翻译成汇编语言。
用户可以使用“-S”选项来进行查看,该选项只进行编译而不进行汇编,生成汇编代码。
实例:gcc –S hello.i –o hello.s
汇编(生成机器可识别代码)
汇编阶段是把编译阶段生成的“.s”文件转成目标文件
读者在此可使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了
实例:gcc –c hello.s –o hello.o
连接(生成可执行文件或库文件)
在成功编译之后,就进入了链接阶段。
实例:gcc  hello.s –o hello.o
或者直接:gcc  hello.s 会生成一个a.out文件

2.Linux下的静态库和动态库的理解

g++的基本使用过程和gcc一样

谈谈链接:

Linux下已经携带了语言级别的头文件和语言对应的库。

库分为两种(库的本质也是一个文件)

linux下划分的

1.静态库

labXXXX.a

2.动态库

labXXX.so

windows下划分:

1.静态库(xxxx.lab)

2.动态库(xxxx.dll)

我们用的指令很大一部分是用c写的

如何看待指令呢?

指令就是程序,工具。指令,程序,工具其实就是一回事。

1.库分为静态库(专门让编译器,对用户的程序进行静态链接的)和动态库(专门让编译器,对用户的程序进行动态链接的)

2.静态库和静态链接:链接的时候,如果是静态链接,找到静态库,拷贝静态库中我所需要的代码到我自己的的可执行程序中。

3.动态库和动态链接:链接的时候,如果是动态链接,找到动态库,拷贝动态库中我所需要的代码的地址到我自己的可执行程序中的相关位置。

4.静态链接成功:我们的程序,不依赖任何库,自己就可以独立运行

5.动态链接成功:我们的程序,还是依赖动态库,一旦动态库缺失,我们的程序无法运行。

6.静态库:因为自身拷贝的问题,比较浪费空间

7.动态库:因为可以做到被大家共享方法,所以真正的实现永远是在库中,程序内部只有地址,比较节省空间。

8.静态库vs动态库:Linux系统默认的是动态库和动态链接

3.Linux项目自动化构建工具——make/makefile

1.make是一个命令

m(M)akefie是一个文件——在当前的源代码路径下

2.规则

makefile是一个围绕依赖关系和依赖路径构建的一个自动化编译的工具

 以上只是简单的makefile的使用

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端提效】-- VsCode 实用插件推荐

EditorConfig for VS Code ***** 作用:多人协同开发,规范缩进风格,缩进大小,tab长度以及字符集等,解决不同IDE的编码范设置,在这里配置(.editorconfig)的代码规范规则优先级高于编辑…

java诊断与调优常用命令jmap、jstack、jstat使用实战

java应用运行过程中难免会出现问题,特别是在生产环境,发生异常或宕机情况,需要诊断与分析,定位原因,进行优化,避免下次再次出现问题。 虽然现在有很多可视化工具,使用起来比命令行更方便&#x…

Julia 语言环境安装

Julia 语言支持以下系统: LinuxFreeBSDmacOSWindowsAndroid Julia 安装包下载地址为:Download Julia。 Github 源码地址:GitHub - JuliaLang/julia: The Julia Programming Language。 国内镜像地址:Index of /julia-releases/…

逻辑回归—二元分类问题的操作顺序

对于二元分类问题来说,分类的结果和数据的特征之间仍呈现相关关系,但是y的值不再是连续的,是0~1的跃迁。但是在这个过程中,什么仍然是连续的呢?”是概率,概率是逐渐升高的,当达到一个…

AI制药 - TMScore(US-align)、RMSD、Sequence 源码

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/129125467 参考文档:Nature Methods | 蛋白、RNA、DNA及其复合物结构的比对算法US-align 官网地址:https://zhanggroup.org/US-align/ TMScore TMScore,…

文件系统与动静态库的基本了解

目录文件系统与动静态库的基本了解文件系统了解Access Modify Changeinode硬链接软链接静态库与动态库概念静态库的制作使用静态库动态库的制作使用动态库总结如何制作文件系统与动静态库的基本了解 文件系统 了解Access Modify Change 当文件没有被打开时,他们存…

数据挖掘,计算机网络、操作系统刷题笔记50

数据挖掘,计算机网络、操作系统刷题笔记50 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,orac…

(考研湖科大教书匠计算机网络)第五章传输层-第八节1:TCP连接管理理论部分(三次握手与四次挥手)

获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航此部分内容借鉴博主【小林coding】 ,其对计算机网络内容的图解可以说是深入浅出,尤其是三次握手和四次挥手这一部分,堪称全网最佳。所这…

webpack5打包工具的使用

目录 -----------------------------基础篇------------------------------- 一、为什么需要打包工具 二、基本使用 1、模式 2、使用步骤 三、基本配置 1、五大核心概念 2、准备 Webpack 配置文件 3、运行指令 四、开发模式 五、处理样式资源 1、处理CSS资源 2、处…

100份简历才找一个合适的,2023,软件测试岗位饱和了吗?

各大互联网公司的接连裁员,政策限制的行业接连消失,让今年的求职雪上加霜,想躺平却没有资本,还有人说软件测试岗位饱和了,对此很多求职者深信不疑,因为投出去的简历回复的越来越少了。 另一面企业招人真的…

闪光桐人の实习日记(2023年2月20-27日)

前往闪闪の小窝以获得更好的阅读和评论体验 文章目录2023年2月20日(Vue入门)概念Vue基础Vue中的MVVMVue的体验Vue的生命周期Vue指令Vue组件VueRouter前后端路由的区别工作原理两种模式比较route跟router的区别路由属性导航守卫Vuex概述5种基本对象基本使…

Qt线程QThread详解

目录前言1.QThread介绍2.QThread示例一3.QThread示例二4.线程同步前言 在程序中使用线程可以提高程序的性能、并发性、响应性和稳定性,使得程序设计更加灵活和简单。但是,线程编程也有一些挑战,如线程安全性和死锁等问题需要格外注意。我们使…

【1】linux命令每日分享——mkdir

大家好,这里是sdust-vrlab,Linux是一种免费使用和自由传播的类UNIX操作系统,Linux的基本思想有两点:一切都是文件;每个文件都有确定的用途;linux涉及到IT行业的方方面面,在我们日常的学习中&…

【机器学习】决策树-ID3算法

1.ID3算法 ID3算法利用信息增益进行特征的选择进行树的构建。信息熵的取值范围为0~1,值越大,越不纯,相反值越小,代表集合纯度越高。信息增益反映的是给定条件后不确定性减少的程度。每一次对决策树进行分叉选取属性的时候&#x…

网络计划--时间参数的计算和优化

根据网络图的基本概念和原则绘制出网络图之后,我们可以计算网络图中有关的时间参数,主要目的是找出关键路线,为网络计划的优化、调整和执行提供明确的时间概念。如下图中从始点①到终点⑧共有4条路线,可以分别计算出每条路线所需的…

使用maven搭建父子工程项目

创建父子工程,可以通过父工程来引入jar,定义统一的版本号等。更方便对整个项目的jar包实现统一化管理,让项目的层次更加清晰。一、创建父工程第一步:file–>new–>project–>maven默认使用jdk1.8,不引入任何j…

音视频基础之视频主要概念

视频主要概念 **视频码率:**kb/s,是指视频文件在单位时间内使用的数据流量,也叫码流率。码率越大,说明单位时间内取样率越大,数据流精度就越高。 **视频帧率:**fps,通常说一个视频的25帧&…

ur3+robotiq ft sensor+robotiq 2f 140配置rviz仿真环境

ur3robotiq ft sensorrobotiq 2f 140配置rviz仿真环境 搭建环境: ubuntu: 20.04 ros: Nonetic sensor: robotiq_ft300 gripper: robotiq_2f_140_gripper UR: UR3 在安装sensor和gripper之前,先简单配置一下UR机械臂的仿真环境,可参考这篇博…

jenkins下载与简单使用

1.jenkins下载 因为我仍然使用的是jdk1.8进行开发,所以我下载的是jenkins2.332.1版本(jenkins2.346.1版本在2022年末不再支持java8,如果项目使用的是jdk11可以继续使用该jenkins版本),更多版本下载请点击jenkins下载 …

ADRC自抗扰控制总结

目录 前言 1.ADRC形式 1.1形一 1.2形二 2.被控对象 3.仿真分析 3.1仿真模型 3.2仿真结果 4.学习问题 前言 前面的3篇文章依次介绍了微分跟踪器TD、状态观测器ESO和非线性状态误差反馈NLSEF三部分内容,至此ADRC的结构已经介绍完毕,现在对分块学习…