• Linux课程四课---Linux开发环境的使用(gcc/g++编译器的相关)


    作者前言

    🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂
    ​🎂 作者介绍: 🎂🎂
    🎂 🎉🎉🎉🎉🎉🎉🎉 🎂
    🎂作者id:老秦包你会, 🎂
    简单介绍:🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂🎂
    喜欢学习C语言、C++和python等编程语言,是一位爱分享的博主,有兴趣的小可爱可以来互讨 🎂🎂🎂🎂🎂🎂🎂🎂
    🎂个人主页::小小页面🎂
    🎂gitee页面:秦大大🎂
    🎂🎂🎂🎂🎂🎂🎂🎂
    🎂 一个爱分享的小博主 欢迎小可爱们前来借鉴🎂


    快速认识一下

    C语言推荐gcc
    c++语言推荐g++
    两者的差别不大主要
    c++语言:
    在这里插入图片描述
    C语言
    在这里插入图片描述

    程序编译的过程

    我们大概知道 C语言 ->汇编语言->二进制,
    在这里插入图片描述
    这个只是大概说明了先有语言再有编译器,由于各种原因,这些编译器可能就不是用这些语言来写的了

    预处理

    1. 头文件展开
    2. 去注释
    3. 宏替换
    4. 条件编译
      我们知道在头文件进行写入条件编译主要就是防止头文件重复包含
      这个过程只是进行一系列操作,语言没有改变
    gcc -E code.c -o code.i
    
    • 1

    编译
    C语言翻译成汇编语言

    gcc -S code.i -o code.s
    
    • 1

    汇编
    汇编语言翻译成二进制

    gcc -c code.s -o code.o
    
    • 1

    需要注意的是这个code.o文件不是可执行文件,不能执行
    链接

    gcc code.o -o code
    
    • 1

    执行code文件就可以了

    ./code
    
    • 1

    动静态标准库----链接

    我们可以使用下面指令,可以查看code文件用到了哪些库

    ldd code
    
    • 1

    在这里插入图片描述
    Linux中的c标准库就是libc.so.6
    不同的系统的库的后缀是不太一样的

    在这里插入图片描述
    在linux 系统下安装了C语言的头文件

    ls /usr/include/
    
    • 1

    在这里插入图片描述
    也安装了C标准库

    ls /lib64/linc
    
    
    • 1
    • 2

    在这里插入图片描述
    如果平台要支持开发就要提前在系统中安装语言头文件库文件

    简单的理解就是动静态库本身就是一个文件,头文件也是文件

    在这里插入图片描述
    这个图可以帮助我们理解动态库的使用,你是一名学生,你的作业就是执行代码,但是你需要上网才能完成作业,但是你不知道网吧地址,可是学长告诉你了,你就会去这个地方去上网,上完网后,你就会回来继续写作业,直到完成,
    而静态库的就是我们链接的时候我们把需要用到的方法直接拷贝到可执行程序,不受静态库的影响,哪怕静态库出来问题也不影响可执行程序。
    简单的理解就是允许我们拷贝的库就是静态库,允许我们链接的就是动态库

    平时我们使用的函数也称为库函数

    动态库

    大致意思:在程序链接的时候只是作些标记(地址),然后在程序开始启动运行的时候,动态地加载所需库(模块)也是就通过地址找到对应的模块,
    优点

    1. 节省资源(包括内存、网络…等资源),不会出现重复代码(只要没有重复,所有的花费都是必要的)

    缺点:

    1. 对库的依赖性比较强,一旦库丢失,所有使用这个库的程序就会无法允许

    例子:

    gcc code.c -o code.out
    ldd code.out
    file code.out
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    静态库

    大概:只用于链接生成可执行文件阶段。链接器会将程序中使用到函数的代码从库文件中拷贝到应用程序中,一旦链接完成生成可执行文件之后,在执行程序的时候就不需要静态库了

    优点

    1. 不依赖库,同类型平台中都可以运行使用

    缺点

    1. 可执行程序体积比较大,比较浪费资源

    如果没有安装过静态库就会报错
    在这里插入图片描述
    ld就是链接器

    我们需要先安装C语言静态库

    sudo yum install glibc-static
    
    • 1

    c++的静态库就是

    sudo yum install libstdc++-static
    
    • 1

    然后进行文件链接就可以了

    gcc Newcode1.c -o newcode_static -static
    
    • 1

    可以看到我们使用ldd指令查看链接的库,可以发现,链接的是静态库
    在这里插入图片描述
    在这里插入图片描述
    这个图也可以说明,同一个文件进行不同的链接,大小会改变,静态链接的可执行文件的大小更大

  • 相关阅读:
    69、配置AWS服务,接收来自RTSP流的推送
    一起Talk Android吧(第四百二十九回:在Android中使用MQTT通信三)
    ORB-SLAM2 ---- ORBextractor::ORBextractor类
    分布式锁问题以及解决方案(附带讲解视频)
    java火焰图收集
    遥遥领先的内存函数
    LeetCode:每日一题【第一周】
    Javascript知识【案例:复选框操作】
    PointRend 原理与代码解析
    Linux标准IO和文件IO
  • 原文地址:https://blog.csdn.net/m0_69984273/article/details/136358722