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

news2024/11/20 1:27:50

一、程序的翻译过程: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://www.coloradmin.cn/o/1661789.html

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

相关文章

【知识碎片】2024_05_10

每日代码 至少是其他数两倍的最大数 . - 力扣&#xff08;LeetCode&#xff09; int dominantIndex(int* nums, int numsSize) {int max_num 0;int next_max 0;int pos 0;for(int i 0; i < numsSize; i){if(nums[i] > max_num) {pos i;next_max max_num;max_num…

【Linux】简易进度条的实现

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解Linux中进度条的实现的相关内容。 如果看到最后您觉得这篇文章写得…

LeetCode算法题:7. 整数反转

给你一个 32 位的有符号整数 x &#xff0c;返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−2^31, 2^31 − 1] &#xff0c;就返回 0。 假设环境不允许存储 64 位整数&#xff08;有符号或无符号&#xff09;。 示例 1&#xff1a; 输…

QML配合VTK基本实现

采用 QT5.15 VTK9.2.0 建立QT QUICK项目 部分方法来源于 QML加载VTK main.cpp #include <QGuiApplication> #include <QQmlApplicationEngine>#include <QQuickVTKRenderWindow.h> #include <QQuickVTKRenderItem.h> #include <vtkPolyDataMapp…

使用2G内存求20亿个数字中出现次数最多的N个

又是一个TOP -N的题目 我看了一下CSDN上大多数人的回答和GPT说的差不多&#xff0c;都是说使用哈希之类的&#xff1b; 我今天说一下我的解法&#xff0c;首先说一下不太快的基础解法 20亿数字使用uint32需要80GB&#xff0c; &#xff08;1&#xff09;分为40块读取&#…

百面算法工程师 | 传统图像处理——OpenCV

本文给大家带来的百面算法工程师是传统图像处理的面试总结&#xff0c;文章内总结了常见的提问问题&#xff0c;旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中&#xff0c;我们将介绍一些集几何变换和图像平滑处理&#xff0c;并提供参考的回答及其理论基础&…

中国地面气候资料日值数据获取方式

数据简介 环境气象数据服务平台提供了全国大约2100个点位&#xff0c;2000年至2023年的逐日数据。包括气温、气压、湿度、风、降水等要素。 数据基于ECMWF reanalysis-era5-land、reanalysis-era5-single-levels 以及中国2100站点地面气候资料日值观测数据&#xff0c;使用机器…

深入Android ViewModels:Dos和Don‘ts

深入Android ViewModels&#xff1a;Dos和Don’ts 若你正使用ViewModels&#xff0c;务记以下几点以提升代码质量。本系列文章深入探讨了利用Android ViewModels的最佳实践&#xff0c;强调必须遵循和避免的关键点&#xff0c;以提升代码质量。我们将讨论ViewModels在管理UI状…

HarmonyOS开发案例:【生活健康app之编写通用工具类】(5)

本节将介绍日志打印、时间换算等通用工具类的编写和使用&#xff0c;工具类可以简化应用代码编写和业务流程处理。 日志类 日志类Logger旨在提供一个全局的日志打印、日志管理的地方&#xff0c;既可以规范整个应用的日志打印&#xff0c;也方便日后对日志工具类进行修改&…

CV每日论文--2024.5.9

1、Tactile-Augmented Radiance Fields 中文标题&#xff1a;触觉增强的辐射场 简介&#xff1a;我们提出了一种新的场景表示方法,称为"触觉增强的辐射场(Tactile-Augmented Radiance Fields, TaRF)"。这种方法将视觉和触觉信息融合到一个共享的三维空间中。通过拍摄…

【Vue2】关于response返回数据的错误小记

关于Vue2中response返回数据的一个错误小记 如图&#xff0c;在这里返回的时候&#xff0c;后端是通过List< String >返回的&#xff0c;response接收到的实际上是一个Array数组&#xff0c;但是赋值给searchedTaskList的时候&#xff0c;需要在.then包括的范围里面赋值给…

2024年心理健康与人文发展国际学术会议(ICPHHD 2024)

2024年心理健康与人文发展国际学术会议(ICPHHD 2024) 2024 International Conference on Psychological Health and Humanistic Development 一、【会议简介】 2024年心理健康与人文发展国际学术会议&#xff0c;将汇集全球的心理学家和导师、学者。 在这个盛大的学术会议上&am…

智启未来:富唯智能AI-ICDP引领的可重构柔性装配产线

在全球制造业竞争日益激烈的今天&#xff0c;如何快速响应市场变化、提高生产效率、降低生产成本&#xff0c;成为了企业面临的重要挑战。随着产品个性化时代的到来&#xff0c;装配产品频繁变换&#xff0c;多品种小批量的生产模式逐渐成为主流。在这一背景下&#xff0c;富唯…

msix packaging tool打包问题

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

【Linux】Linux——Centos7安装Tomcat

1.下载Tomcat 安装包 官网地址&#xff1a;Apache Tomcat - Apache Tomcat 9 Software Downloadshttps://tomcat.apache.org/download-90.cgi 2.将下载的安装包上传到 Xftp 上&#xff0c;我是直接放到 usr 下了 3.将安装包解压到 /usr/local/ tar -zxvf apache-tomcat-9.0.8…

google地图js,添加标记,以及infowindow信息弹窗

&#xff08;谷歌地图版本V3&#xff09; var contentString "<div classdevinfo><P>设备ID: BJ-20240507</p> <P>设备状态: 正常</p> <P>通讯信号: 89% </p> <P>设备位置: 中国</p> <P>剂量率: 988</p&…

TCP协议的确认应答机制

TCP&#xff08;Transmission Control Protocol&#xff09;是一种面向连接的、可靠的、基于字节流的传输层协议&#xff0c;它在网络通信中扮演着至关重要的角色。其中&#xff0c;确认应答机制是TCP协议中的一个核心概念&#xff0c;它确保了数据的可靠传输。本文将详细介绍J…

【原创】springboot+mysql物资库存管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

SSIM(Structural Similarity),结构相似性及MATLAB实现

参考文献 Wang, Zhou; Bovik, A.C.; Sheikh, H.R.; Simoncelli, E.P. (2004-04-01). “Image quality assessment: from error visibility to structural similarity”. IEEE Transactions on Image Processing. 13 (4): 600–612. Bibcode:2004ITIP…13…600W. CiteSeerX 10.…

IDEA-SpringBoot项目启动类位置错误导致启动报错

文章目录 前言&#xff1a;本文为SpringBoot项目启动类位置错误导致启动报错解决方案 笔者在初学SpringBoot项目时遇到过因启动类位置错误导致项目启动报错现象&#xff0c;总结如下&#xff1a; SpringBoot启动发送请求后遇到如下错误&#xff1a; Postman界面信息&#xff1…