3---Linux编译器gcc/g++

一、程序的翻译过程:ESc->iso

1.1预处理:c->c

  • 主要功能:宏替换、头文件的展开、条件编译、去注释;目的是让代码变得纯粹。
  • 条件编译,可以实现对代码的裁剪。比如对于不同用户,设置不同的宏常量,条件编译时就会进入不同的分支,裁剪掉未使用的分支。
  • 利用gcc的-E选项,可以让一个.c文件只完成预处理任务。gcc -E hello.c -o hello.i。
  • -o表示目标文件,.i文件是经过预处理的.c文件。

        

1.2编译: c->汇编

  • 主要功能:检查代码的规范性,是否有语法错误。没有的话将代码翻译为汇编语言。
  • 使用gcc的-S选项,可以让一个.i文件只完成编译任务。gcc -S hello.i -o hello.s

        

1.3汇编: 汇编->二进制

  • 主要功能:将.s文件转换为.o文件

        

1.4链接:

  • gcc hello.c -o hello

二、编译器和编程语言

        编译器本质上是一个软件,是由编程语言实现的。所以早期是先有编程语言才有的编译器。早期人和计算机实现交互依靠的是二进制编码。但是二进制效率太低,就发明了汇编语言。计算机依靠由二进制编码实现的编译器,将汇编语言翻译为二进制编码。之后又使用汇编语言实现汇编编译器,将c语言翻译为汇编语言。

三、gcc选项

        

四、动静态库概念和理解:

4.1对开发环境安装的理解:

        安装下载并拷贝头文件和库文件到开发环境中的特定路径下。这个路径一定要可以被编译器自己找到。

4.2程序组成:

        我们的代码+头文件(提供声明)+库文件(提供实现)=我们的可执行程序。

4.3库的命名规则:

  • 库的真正名称,要去掉库的前缀名和后缀。以libc.so.6为例,去掉前缀lib和后缀so.6。这个库的真正名称就是c,即c标准库。
  • 在Linux下,以.so结尾为动态库;以.a结尾为静态库。
  • 在Windows下,以.dll结尾为动态库;以lib结尾为静态库。
  • 静态库数量少于动态库。

4.4共享库:

动态库:

  • 动态链接,是由c/c++或者其他第三方提供的所有方法的集合,被所有的程序以链接的方式联系起来。库中所有的函数都有入口地址,所谓动态链接,就是将要调用的函数在库中的地址拷贝到可执行程序的特定位置。

静态库:

  • 静态链接,是由c/c++或者其他第三方提供的所有方法的集合,就是将要调用的函数在库中的代码拷贝一份到自己的代码中。

4.5动态链接和静态链接的优缺点:

  • 动态链接,形成的可执行程序体积比较小,比较节省资源。但是要去动态库寻址调用,速度稍微慢一点。
  • 静态链接,可以无视库独立运行,因为库中的函数被拷贝了一份放在自己的代码中;但是代码体积太大,浪费资源。
  • gcc默认使用动态链接生成可执行程序,

4.6安装静态库:

  • 默认情况下,不安装静态库。
  • sudo yum install -y glibc.static   安装c语言静态库

        

  • sudo yum install -y glibc-static libstdc++-static   安装c++静态库

        

4.7使用-static指定生成的可执行程序调用静态库。

        

五、自动化构建代码:

5.1所需命令:

  • make/makefile:make是命令,makefile是当前目录下存在的一个具有特定格式的文件。
  • 创建的文件的文件名可以为makefile,也可以是Makefile。

5.2解析:

        

  • 依赖关系:mybin:code.c
  • 以来方法:gcc code.c -o mybin
  • 使用make自动编译当前目录生成可执行文件
  • 直接make会自动使用第一个配置命令
  • make+指定配置指令会调用指定的指令

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

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

相关文章

聚观早报 | 苹果新款iPad Pro发布;国产特斯拉4月交付量

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 5月9日消息 苹果新款iPad Pro发布 国产特斯拉4月交付量 iOS 18新功能爆料 真我GT Neo6续航细节 三星Galaxy Z F…

【计算机毕业设计】springboot海产品加工销售一体化管理系统

时代在飞速进步,每个行业都在努力发展现在先进技术,通过这些先进的技术来提高自己的水平和优势,海产品加工销售一体化 管理系统当然不能排除在外。微信小程序海产品加工销售一体化管理系统是在实际应用和软件工程的开发原理之上,运…

驱动开发-字符设备驱动的注册与注销

1.注册字符设备驱动 #include<fs.h> int register_chrdev(unsigned int major,const char *name,const struct file_operations *fops) 函数功能&#xff1a;注册字符设备驱动 参数&#xff1a;major&#xff1a;主设备号 major>0:静态指定主设备号&#xff0c;不…

IOS 苹果IAP(内购)之创建沙盒账号

IOS 苹果IAP&#xff08;内购&#xff09;之创建沙盒账号 沙盒账号是什么&#xff1f;沙盒账号创建的前提条件沙盒账号创建沙盒账号使用流程沙盒账号注意事项 沙盒账号是什么&#xff1f; 如果IOS应用里面用到了苹果应用内付费&#xff08;IAP&#xff09;功能&#xff0c;那么…

Python管理PVE(Proxmox VE)云平台--节点资源统计

一、前言 写本脚本的初衷是因手动查看统计已分配的PVE资源过于耗时&#xff0c;因此写一个脚本一劳永逸&#xff0c;具体实现方法&#xff1a;利用Python的paramiko模块进行远程命令查看、统计PVE平台各节点已分配的cpu、内存、磁盘空间。 二、步骤 1.构建shell脚本 1.1 统计…

基于SpringBoot的全国风景区WebGIS按省展示实践

目录 前言 一、全国风景区信息介绍 1、全国范围内数据分布 2、全国风景区分布 3、PostGIS空间关联查询 二、后台查询的设计与实现 1、Model和Mapper层 2、业务层和控制层设计 三、WebGIS可视化 1、省份范围可视化 2、省级风景区可视化展示 3、成果展示 总结 前…

EMAP的简单开发(单表)

注意框架版本选择SPA_v1 一个数据源代表一个业务&#xff0c;选择一个就会产生对应的应用 index.jsp是展示的页面 conifg.js是index.jsp引用渲染的一个js文件 index.jsp中的全局变量中有一个pageMeta和contaextPath&#xff1a; pageMeta&#xff1a;是一个对象&#xff0c;…

办公技巧之合集文档 拆分_word

问题 如何将文档合集拆分为单独文档。 操作步骤 软件 word 365 原理简述&#xff1a; 在 word 大纲视图下&#xff0c;通过一级标题确定子文档范围&#xff0c;然后导出即可。 文档结构 从下图可见&#xff0c;文档结构为已建立大纲级别的文档&#xff0c;如果没有建立&a…

初探 JUC 并发编程:读写锁 ReentrantReadWriteLock 原理(8000 字源码详解)

本文中会涉及到一些前面 ReentrantLock 中学到的内容&#xff0c;先去阅读一下我关于独占锁 ReentrantLock 的源码解析阅读起来会更加清晰。 初探 JUC 并发编程&#xff1a;独占锁 ReentrantLock 底层源码解析 6.4&#xff09;读写锁 ReentrantReadWriteLock 原理 前面提到的 R…

Java入门——类和对象(上)

经读者反映与笔者考虑&#xff0c;近期以及往后内容更新将主要以java为主&#xff0c;望读者周知、见谅。 类与对象是什么&#xff1f; C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。 JAVA是基于面向对…

C++常用库函数——strcmp、strchr

1、strcmp&#xff1a;比较两个字符串的值是否相等 例如 char a1[6] "AbDeG",*s1 a1;char a2[6] "AbdEg",* s2 a2;s1 2;s2 2;printf("%d \n", strcmp(s1, s2));return(0); s1指向a1&#xff0c;s2指向a2&#xff0c;strcmp表示比较s1和s…

万物生长大会 | 创邻科技再登杭州准独角兽榜单

近日&#xff0c;由民建中央、中国科协指导&#xff0c;民建浙江省委会、中国投资发展促进会联合办的第八届万物生长大会在杭州举办。 在这场创新创业领域一年一度的盛会上&#xff0c;杭州市创业投资协会联合微链共同发布《2024杭州独角兽&准独角兽企业榜单》。榜单显示&…

数据库被攻击后出现1044 - access denied for user ‘root‘@‘% ‘ to database table

MySQL数据库被攻击后&#xff0c;数据库全部被删除&#xff0c;并且加一个一个勒索的数据&#xff0c;向我索要btc&#xff0c; 出现这个问题就是我的数据库密码太简单了&#xff0c;弱密码&#xff0c;被破解了&#xff0c;并且把我权限也给修改了 导致我操作数据库时&#…

vs2019 里 C++ 20规范的 string 类的源码注释

&#xff08;1&#xff09;读源码&#xff0c;可以让我们更好的使用这个类&#xff0c;掌握这个类&#xff0c;知道咱们使用了库代码以后&#xff0c;程序大致具体是怎么执行的。而不用担心程序出不知名的意外的问题。也便于随后的代码调试。 string 类实际是 库中 basic_strin…

国产开源物联网操作系统

软件介绍 RT-Thread是一个开源、中立、社区化发展的物联网操作系统&#xff0c;采用C语言编写&#xff0c;具有易移植的特性。该项目提供完整版和Nano版以满足不同设备的资源需求。 功能特点 1.内核层 RT-Thread内核包括多线程调度、信号量、邮箱、消息队列、内存管理、定时器…

Bokeh实战高级教程:用滑块控件打造动态数据可视化

在数据可视化的世界里&#xff0c;Bokeh无疑是一颗璀璨的明星。它不仅提供了丰富的图表类型&#xff0c;还支持强大的交互功能。今天&#xff0c;我们就来深入探讨如何使用Bokeh的滑块控件&#xff0c;轻松实现数据的动态展示。 首先&#xff0c;让我们从创建ColumnDataSource开…

纯血鸿蒙APP实战开发——阅读翻页方式案例

介绍 本示例展示手机阅读时左右翻页&#xff0c;上下翻页&#xff0c;覆盖翻页的功能。 效果图预览 使用说明 进入模块即是左右翻页模式。点击屏幕中间区域弹出上下菜单。点击设置按钮&#xff0c;弹出翻页方式切换按钮&#xff0c;点击可切换翻页方式。左右翻页方式可点击翻…

C++:多态-重写和重载

重写&#xff08;Override&#xff09;和重载&#xff08;Overload&#xff09;是面向对象编程中常用的两个概念&#xff0c;它们虽然都涉及到方法的定义&#xff0c;但是在实现和使用上有着不同的特点。 重写&#xff08;Override&#xff09;&#xff1a; 重写是指在子类中重…

Python图形复刻——绘制母亲节花束

各位小伙伴&#xff0c;好久不见&#xff0c;今天学习用Python绘制花束。 有一种爱&#xff0c;不求回报&#xff0c;有一种情&#xff0c;无私奉献&#xff0c;这就是母爱。祝天下妈妈节日快乐&#xff0c;幸福永远&#xff01; 图形展示&#xff1a; 代码展示&#xff1a; …

论文解读--------FedMut: Generalized Federated Learning via Stochastic Mutation

动机 Many previous works observed that the well-generalized solutions are located in flat areas rather than sharp areas of the loss landscapes. 通常&#xff0c;由于每个本地模型的任务是相同的&#xff0c;因此每个客户端的损失情况仍然相似。直观上&#xff0c;…