Linux的开发工具(二):编译器gcc/g++与Linux项目自动化构建工具-Makefile

news2024/11/23 17:15:40

Linux的编译器-gcc/g++

基本概念:gcc是专门用来编译c语言的,g++可以编译c++或c语言

问题一:gcc有时候为什么不能编译带有for循环的c语言源文件?

答:gcc版本过低会不支持for循环等c99标准下的内容

解决方式:gcc 源文件名 -std=c99-std=c99是为了让gcc支持c99中的语法)

此外,gcc还可以指定编译生成的可执行程序文件名:gcc -o 自定义名称 源文件 -std=c99 

问题二:gcc中c++源文件的后缀是什么?

答:.cc、.cpp、.cxx,不能

问题三:gcc能编译c++的源文件文件吗? 

答:不能,c++的源文件只能由g++来编译

指令:g++ -o my.exe test.cc -std=c++11

此外,g++也支持编译c语言的源文件,所以:g++ -o my.exe test.c -std=c99

问题四:如何查看自己是否拥有g++?如何安装g++?

答:g++ --version查看g++版本,sudo yum install -y gcc-g++指令进行g++的安装

再次理解程序的翻译过程

过程

gcc命令

说明
预处理gcc -E test.c -o test.i宏替换、去注释、头文件展开、条件编译
编译gcc -S test.i -o test.s将源代码翻译成汇编语言
汇编gcc -c test.s -o test.o汇编语言变为机器码,生成目标文件
链接gcc  test.c -o my.exe

目标文件和库函数结合,生成形成可执行程序

  • -E:从现在开始进行程序的翻译,预处理完成就停下
  • -S:从现在开始进行程序的编译,编译完成就停下
  • -c:从现在开始进行程序的翻译,汇编完成就停下

1、gcc -E test.c -o test.i:将源文件预处理后的结果放入test.i文件

2、gcc -S test.i -o test.s:将test.i文件编译后的结果放入test.s文件

3、gcc -c test.s -o test.o:将汇编语言转换为机器码,然后放入test.o文件

动态链接和静态链接

基本概念:两种不同的链接方式,用于将程序中使用的函数库与程序本身结合起来

动态链接:

  • 特点:告诉了程序目标库的地址,使用该库中的内容时回去该库中调用
  • 优点节省资源
  • 缺点多个程序共享动态库,一旦动态库缺失,所有动态链接这个库的程序都无法执行了

静态链接:

  • 特点:在编译时就把库中的方法拷贝到程序中,之后就不再与库产生任何联系了
  • 优点浪费资源
  • 缺点一旦形成与库无关

在Linux系统中,.so 文件是动态链接库 .a 文件是静态库,且默认情况下linux不会安装静态库

Linux项目自动化构建工具-Makefile

主要组成部分:依赖关系 + 依赖方法

注意事项:

1、make是指令、makefile是文件,它还可以写成Makefile

2、默认情况下,make指令会从上至下读取目标文件,并优先生成第一个目标文件

3、目标文件:后的内容是一个文件列表,文件列表可以为空,如果列表中的多文件会以test1.c test2.c test3.c一个文件隔一个空格的方式存放

4、程序会根据依赖关系执行依赖方法

5、.PHONY:xxx,xxx对应的方法总是要被执行的

6、依赖方法前总要有一个tab留出空间

7、mekefile/make会自动根据文件中的依赖关系,进行自动推导,帮助我们执行所有相关的依赖方法

常见功能:

1、将test.c编译成mytest:

 2、清除编译后的无用文件:

问题一:为什么makefile对最新的可执行程序,默认不重新形成?

答:提高编译效率

问题二:如何做到问题一?

答:

问题三:makefile怎么知道我的程序要被编译了?

答:对比,可执行文件的最新修改时间和源文件的最近修改时间,谁更新?

~over~

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

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

相关文章

Spring定义Bean对象笔记

前言:面向对象语言最基本的元素就是对象,在Spring中把对象都封装为一个个的Bean,即通过Bean容器来管理对象;那么接下来我们看下在Spring中如何创建所需要的Bean。 一、环境准备 员工类 package com.xlb.bean;public class Empl…

在 C#和ASP.NET Core中创建 gRPC 客户端和服务器

关于gRPC和Google protobuf gRPC 是一种可以跨语言运行的现代高性能远程过程调用 (RPC) 框架。gRPC 实际上已经成为 RPC 框架的行业标准,Google 内外的组织都在使用它来从微服务到计算的“最后一英里”(移动、网络和物联网)的强大用例。 gRP…

数据结构——二叉树——堆

前言: 在前面我们已经学习了数据结构的基础操作:顺序表和链表及其相关内容,今天我们来学一点有些难度的知识——数据结构中的二叉树,今天我们先来学习二叉树中堆的知识,这部分内容还是非常有意思的,下面我们…

重读 Java 设计模式: 深入探讨原型模式,灵活复制对象

引言 在软件开发中,经常会遇到需要创建对象的情况。有时候,我们希望创建一个新的对象,但又不想通过传统的构造方法来创建,而是希望通过复制一个现有对象的方式来创建新的对象。这时,原型模式就能派上用场了。原型模式…

【51单片机入门记录】A2普中开发板实验课例程

一、开发板原理图 二、例程 &#xff08;1&#xff09;呼吸灯 #include <STC89C5xRC.H> #include<intrins.h>unsigned int PWM_wanttime0; //想要多长时间改变的占空比一次 unsigned int Breath_wanttime0; //想要多长时间改变呼气或者吸气的值时间 unsigned …

Android Studio 新建aar包

有几个注意事项 第一是注意是选择Android library这个包注意moudle name不能包含apk这三个字符

动手学机器学习双线性模型+习题

在数学中&#xff0c;双线性的含义为&#xff0c;二元函数固定任意一个自变量时&#xff0c;函数关于另一个自变量线性 矩阵分解 设想有N个用户和M部电影&#xff0c;构建一个用户画像库&#xff0c;包含每个用户更偏好哪些类型的特征&#xff0c;以及偏好的程度。假设特征的个…

0.5米多光谱卫星影像在农业中进行地物非粮化、非农化监测

一、引言 随着科技的发展&#xff0c;卫星遥感技术已经成为了农业领域中重要的数据来源。其中&#xff0c;多光谱卫星影像以其独特的优势&#xff0c;在农业应用中发挥着越来越重要的作用。本文将重点探讨0.5米加2米多光谱卫星影像在农业中的应用。 二、多光谱卫星影像概述 多…

ESP8266 WiFi物联网智能插座—上位机软件实现

1、软件架构 上位机主要作为下位机数据上传服务端以及节点调试的控制端&#xff0c;可以等效认为是专属版本调试工具。针对智能插座协议&#xff0c;对于下位机进行可视化监测和管理。 软件技术架构如下&#xff0c;主要为针对 Windows 的PC 端应用程序&#xff0c;采用WPF以及…

Mock.js的基本使用

mock顾名思义&#xff0c;就是模拟的意思&#xff0c;它模拟什么呢&#xff1f;假设我们在开发的过程中&#xff0c;我们需要使用到接口&#xff0c;但是后端接口并没有完善&#xff0c;那么我们就可以使用到mock.js&#xff0c;它可以随机生成数据&#xff0c;拦截AJAX请求&am…

壁纸小程序Vue3(分类页面和用户页面基础布局)

1.配置tabBar pages.json "tabBar": {"color": "#9799a5","selectedColor": "#28B389","list": [{"text": "推荐","pagePath": "pages/index/index","iconPath&quo…

网络安全-内网渗透2

一、MIC 将我们上次未描述完的MIC在这里详细解释一下 咱们所抓的第二个包会给返回一个服务端的challenge 之后服务器回包的第三个包会回复一个client challenge 所以咱们客户端和服务端现在分别有两个challenge&#xff0c;相当于客户端和服务端互相交换了一下challenge 因此…

《深度学习入门之PyTorch》书籍阅读笔记

《深度学习入门之PyTorch》书籍阅读笔记 ISBN 978-7-121-32620-2 多层全连接神经网络 Pytorch基础 Tensor张量 是一个多维矩阵&#xff0c;pytorch的tensor可以和numpy的ndarray相互转换&#xff0c;但numpy的ndarray只能在CPU上运行。不同数据类型的Tensor&#xff0c;t…

nginx的https与动态负载均衡

nginx的https 证书可以根据你的域名和服务器服务商去进行签发 , 比如 : 阿里云 腾讯云 百度云 华为云等 这里使用的是腾讯云 : 下载证书 : 选择 nginx: 下载之后传递到服务器上。 下面开始配置nginx的https: 1. 解压下载的证书包 cd /etc/ssl unzip xxcc.dwa_nginx.zip mv…

JMeter基础用法和测试WebSocket请求

目录 JMeter websocket插件安装测试接口的编写添加测试线程组创建取样器创建WebSocket连接创建循环控制器创建WebSocket request-response Sampler创建固定定时器 正则匹配上一个请求的数据做为当前请求参数正则编写使用匹配值 CSV文件读取参数添加汇总报告和结果树 JMeter web…

zookeeper如何管理客户端与服务端之间的链接?(zookeeper sessions)

zookeeper客户端与服务端之间的链接用zookeeper session表示。 zookeeper session有三个状态&#xff1a; CONNECTING, ASSOCIATING, CONNECTED, CONNECTEDREADONLY, CLOSED, AUTH_FAILED, NOT_CONNECTED&#xff08;start时的状态&#xff09; 1、CONNECTING 。 表明客户…

vulhub中Apache Solr 远程命令执行漏洞复现(CVE-2017-12629)

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发&#xff0c;主要基于 HTTP 和 Apache Lucene 实现。原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个XML/JSON响应来实现。此次7.1.0之前版本总共爆出两个漏洞&#xff1a;[XM…

金三银四面试题(九):JVM常见面试题(3)

今天我们继续探讨常见的JVM面试题。这些问题不比之前的问题庞大&#xff0c;多用于面试中JVM部分的热身运动&#xff0c;开胃菜&#xff0c;但是大家已经要认真准备。 你能保证GC 执行吗&#xff1f; 不能&#xff0c;虽然你可以调用System.gc() 或者Runtime.gc()&#xff0c…

vue3+threejs新手从零开发卡牌游戏(二十四):添加p2战斗逻辑

用代码模拟p2战斗逻辑&#xff0c;按流程进行步骤拆分&#xff1a; 1.p2抽卡 2.p2召唤怪兽上场 3.p2战斗 其中战斗部分分为几种情况&#xff1a; 情况一&#xff1a;p2场上卡牌由大到小进行排序&#xff0c;按序轮询可以攻击的卡牌&#xff0c;然后攻击p1场上卡牌由大到小…

代码随想录阅读笔记-二叉树【完全二叉树节点个数】

题目 给出一个完全二叉树&#xff0c;求出该树的节点个数。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,4,5,6]输出&#xff1a;6 示例 2&#xff1a; 输入&#xff1a;root []输出&#xff1a;0 示例 3&#xff1a; 输入&#xff1a;root [1]输出&#xff1a;1 提示&…