Linux之gcc_makefile

一、提要

        1. 预处理(进行宏替换)

        2. 编译(生成汇编)

        3. 汇编(生成机器可识别代码)

        4. 链接(生成可执行文件或库文件)

        五六十年代,我们编程大多是二进制编程,也就是使用打孔纸带喂给机器

        再往后,科学家们发明汇编语言

        再往后,人们就发明了高级语言

提问:编译器什么时候有的?二进制编程需要编译器吗?

汇编语言时期出现了编译器,二进制则不需要

最早人们先用二进制写编译器,提供汇编语言进行编程,是先有语言的。

        

二、程序的翻译过程

翻译过程gcc命令说明
预处理gcc -E test.c -o test.i宏替换,去注释,头文件展开
编译gcc -S test.i -o test.s将c语言变为汇编语言
汇编gcc -c test.s -o test.o 汇编语言编译成二进制目标文件
链接gcc test.o / gcc test.o -o my.exe形成可执行程序

注:

1. -E 从现在开始进行程序的翻译,预处理完成就停下。

2. 条件编译 #ifdef  ... #elif  ...  #else ...  #endif ,代码裁剪,可以通过宏来为各种环境来定制代码

问:gcc能裁剪代码吗?

        预处理的时候去注释,编译器优化代码,能改我们的代码,添加宏,所以可以

3. 链接--动静态链接--特点、区别

是什么? 程序和库结合的过程(语言一定要有自己的标准库)

Linux: 动态库: .so  静态库:  .a

windows: 动态库  .dll  静态库:   .lib

怎么办?链接时,有两种链接方式:动态链接 静态链接

动态链接:共享动态库,但是一旦动态库缺失,所有的动态链接这个库的程序,都无法执行了

静态链接:在编译的时候,把库中的方法拷贝到自己的可执行程序中,不在关心任何的库

gcc默认形成的可执行程序,默认采用动态链接

动态库&&动态链接的优缺点

1.不能丢失

2.节省资源

静态库&&静态链接的优缺点

1.一旦形成,跟库无关

2.浪费资源 

三、Linux项目自动化构建工具-make/Makefile

make是一个命令;makefile是个文件,通过vim编辑

.PHONY:XXX

XXX对应的方法,总是要被执行的。

提问:为什么makefile对最新的可执行程序,默认不想重新形成呢?怎么做到的?

答:1.在企业中,通常大型文件编译时,需要几十分钟到几小时不等,甚至更多,为提升效率,还是很有必要的。2.对比,可执行文件的最近修改时间和源文件最近的修改时间,谁更新?

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

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

相关文章

118.Qt入门,实现一个图片查看软件

需要用到的控件 QLabelQLineEditQPushButton 需要实现的功能 打开目录选择图片显示图片的名字显示图片 QLabel基本用法 void setText(const QString &);//设置文本QString text() const;//获取文本void setPixmap(const QPixmap &);设置大小 使用父类QWidget的方法设置…

窗口函数(sample database classicmodels _No.8 )

窗口函数(sample database classicmodels _No.8 ) 准备工作,可以去下载 classicmodels 数据库具体如下 点击:classicmodels 也可以去 下面我的博客资源下载 https://download.csdn.net/download/tomxjc/88685970 文章目录 窗口函…

什么品牌洗地机清洁效果最好?洗地机品牌十大排名:前四名口碑公认

有使用过洗地机的朋友,相信对此都深有感触,洗地机的一洗一吸,清洁效果非常棒,地面的污渍、垃圾、粉尘都坚持不了几秒钟,分分钟可以让家里地面焕然一新,简直不要太香。但是,洗地机那么多&#xf…

Unity类银河恶魔城学习记录11-2 p104 Inventoty源代码

此章节相对较难理解,有时间单独出一章讲一下 Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili InventoryItem.cs…

FMQL45 XADC

通过PL自带的XADC可以读写温度,电压等,但是总是读的不对。开始查找FM_QL_bsp里面少了一个部分就是pl!添加,在ewp已经修改了,但是文件不存在,现在给补上了,有点奇怪,有的项目会自动生…

网络安全-护网行动1

1.什么事hvv行动 2021年攻击队伍 100队伍,不设定攻击路径,在不违法和不破坏防守单位的前提下可以使用任何工具,如社会工程、钓鱼等 攻击方: 又公安部提供统一的攻击平台,场景、规则 防守方:也有自己的平台…

Python入门(小白友好)

知识图谱 搭建环境 安装Python:Download Python | Python.org 安装PyCharm:Download PyCharm: The Python IDE for data science and web development by JetBrains 注意:专业版本是收费的,新手小白使用社区版(community)即可 创建第一个项目: 一些PyCharm的设置(也适用…

Linux之线程同步

目录 一、问题引入 二、实现线程同步的方案——条件变量 1、常用接口&#xff1a; 2、使用示例 一、问题引入 我们再次看看上次讲到的多线程抢票的代码&#xff1a;这次我们让一个线程抢完票之后不去做任何事。 #include <iostream> #include <unistd.h> #inc…

Java项目打包成Docker镜像

将项目打包成Docker镜像 将项目打包成Docker镜像的原因是可以在一台电脑的环境下模拟多台不同性能电脑响应高并发请求时候的表现。这里我们模拟半个CPU、一个CPU还有两个CPU的情况 在pom.xml文件中添加jib插件&#xff08;前提电脑安装了maven和Java 的 JDK才能成功完成编译&…

OLLVM环境配置

虚拟机配置: 4g 40g 增加源 deb [archamd64] http://archive.ubuntu.com/ubuntu focal main universe安装cmake sudo apt-get install cmake -y安装gcc8 sudo apt-get install gcc-8 g-8 -y切换为默认版本 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/…

30.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据搜索功能

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;29.数据推测功能…

Ubuntu Desktop - Desktop

Ubuntu Desktop - Desktop 1. Amazon2. Ubuntu Software3. Desktop4. 系统桌面快捷方式5. 用户桌面快捷方式References 1. Amazon Amazon -> Unlock from Launcher 2. Ubuntu Software Installed -> Games -> Remove 3. Desktop /home/strong/Desktop 4. 系统桌面…

【题目】【网络系统管理】2022年甘肃省职业院校技能大赛-网络构建-试卷

极安云科专注职业教育技能竞赛培训4年&#xff0c;包含信息安全管理与评估、网络系统管理、网络搭建等多个赛项及各大CTF模块培训学习服务。本团队基于赛项知识点&#xff0c;提供完整全面的系统性理论教学与技能培训&#xff0c;成立至今持续优化教学资源与讲师结构&#xff0…

C++ Qt开发:QUdpSocket网络通信组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QUdpSocket组件实现基于UDP的网络通信…

11|代理(下):结构化工具对话、Self-Ask with Search以及 Plan and execute代理

在上一讲中&#xff0c;我们深入LangChain程序内部机制&#xff0c;探索了AgentExecutor究竟是如何思考&#xff08;Thought&#xff09;、执行&#xff08;Execute/Act&#xff09;和观察&#xff08;Observe&#xff09;的&#xff0c;这些步骤之间的紧密联系就是代理在推理&…

AI智能客服所需的数据

实现智能客服所需的数据可以分为几个主要类别&#xff0c;这些数据对于训练和优化智能客服系统都是至关重要的。以下是一些通常需要准备的数据&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.对话数…

Android Studio实现内容丰富的安卓民宿酒店预订平台

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动 1.开发环境android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看民宿 3.民宿预订 4.民宿预订支付&#xff0c; 5.支付订单 6.评论管…

spring suite搭建springboot操作

一、前言 有时候久了没开新项目了&#xff0c;重新开发一个新项目&#xff0c;搭建springboot的过程都有点淡忘了&#xff0c;所有温故知新。 二、搭建步骤 从0开始搭建springboot 1&#xff0e;创建work空间。步骤FileNewJava Working Set。 2.选择Java Working Set。 3.自…

IPD集成产品开发:塑造企业未来竞争力的关键

随着市场竞争的日益激烈&#xff0c;企业对产品开发的要求也越来越高。如何在快速变化的市场环境中&#xff0c;既保证产品的批量生产效率&#xff0c;又满足客户的个性化需求&#xff0c;成为了企业面临的重要挑战。IPD&#xff08;集成产品开发&#xff09;模式&#xff0c;作…

何为布控球?布控球的分类对比

主要的分类有&#xff1a; 根据内部的主控板卡的系统分类&#xff0c;典型的是基于海思芯片的嵌入式LINUX系统的&#xff0c;一般出国标GB28181&#xff0c;另外一种是剑走偏锋的安卓系统的&#xff0c;需要把球机的输出YUV转换为UVC接入安卓主板&#xff0c;作为外接USB摄像头…