码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • gcc/g++的使用


    目录

    1. 什么是gcc/g++?

    2. gcc是如何完成转换?

    1. 预处理

    2. 编译

    3. 汇编

     4. 链接

    库分为静态库和动态库


    1. 什么是gcc/g++?

    gcc/g++是一种编译器,用来将C/C++语言转换成机器语言

    2. gcc是如何完成转换?

    格式:gcc [选项] 编译的文件 [选项] [目标文件]

    如果直接进行gcc  [编译文件] -o [目标文件],则会直接生成可执行文件

    gcc将高级语言转换成机器语言分为四个步骤:

    1. 预处理

    预处理中主要包含了四个步骤

    • 头文件的展开
    • 宏替换
    • 注释替换
    • 条件编译

    格式:gcc -E test.c -o test.i

     

     我们可以看见预处理阶段完成了我们所说的所有步骤

    2. 编译

    编译的最主要功能将高级语言转换成汇编语言

    格式:gcc -S test.i -o test.s

     汇编语言比起高级语言更加简洁

    3. 汇编

    编译的最重要步骤是将汇编语言转换成二进制语言,也就是机器可识别代码

    格式:gcc -c test.s -o test.o

     4. 链接

    在生成.o结尾的文件后就标识着编译成功,接着我们就需要进行链接

    格式:gcc test.o -o test

     

     这里我们需要涉及一个重要的知识点,那就是我们为什么要进行链接?

    我们已经将我们的代码编译成功了,链接的作用又是什么呢?

     我们可以发现我们所写的代码中,包含了printf函数,而print这个函数是我们所实现的吗?明显不是,那我们调用这个函数就需要完成这个函数的实现,又因为我们没有完成这个函数的实现,但是库中实现了这个函数,因此我们在进行链接的时候是链接的那些库,以供我们完成运行。

    库分为静态库和动态库

    静态库是指编译链接时,将所实现的函数代码全部加入进可执行文件中,因此生成的文件比较大,但是在运行中就不需要在链接库函数

    动态库是指编译链接时,没有将所实现的函数代码加入在可执行文件中,而是在链接期间链接了所需的库,这样可以节省空间

    在Linux中,默认链接的是动态库

     而我们也可以主动链接静态库

     我们发现当链接静态库时,内存大小几乎是链接动态库的100倍


     

  • 相关阅读:
    LeetCode 面试题 05.03. 翻转数位
    测试进阶必备,这5款http接口自动化测试工具不要太香~
    iOS 真机打包,证书报错No signing certificate “iOS Distribution” found
    VulnStack - ATT&CK红队评估实战(四) Writeup
    17 STL - 函数对象
    httpdns是个什么技术,有什么用
    数据库及ADO.NET学习(三)
    k8s-实战——redis集群部署
    Java面试题总结(一)
    NVIDIA 7th SkyHackathon(四)Nemo ASR 模型训练与评估
  • 原文地址:https://blog.csdn.net/Rinki123456/article/details/126022558
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号