• linux5-make、库文件(静态库和共享库)


    一、make

    Linux上的工程管理工具,可以实现自动化编译;

    1)安装make:

    在这里插入图片描述

    2)make的使用:

    以此为例:
    在这里插入图片描述

    |

    //多文件的编译 
    gcc -o main main.c add.c max.c 
    
    
    gcc -c main.c 
    gcc -c add.c 
    gcc -c max.c 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    makefile的编写:

    在这里插入图片描述

    all:main 
    main:add.o max.o main.o 
    	gcc -o main add.o max.o main.o 
    
    add.o:add.c 
    	gcc -c add.c 
    
    max.o:max.c 
    	gcc -c max.c 
    main.o:main.c 
    	gcc -c main.c 
    
    clean:
    	rm -rf *.o main
    	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    注意:

    写makefile(可以改名字,但不建议,可能可以运行)的时候要定格写,以及tab键,可以不空行
    注意写makefile文件的时候,顶格写,tab键(不是空格);
    vim makefile
    make
    ./main
    自己练习:多次make看结果,修改一个文件make看结果,make clean

    在这里插入图片描述

    clean的使用:

    在这里插入图片描述

    二、库文件

    库–是一组预先编译好的方法的集合;
    Linux系统存储库的位置一般在:/lib 和 /usr/lib;在64位系统上有些库也可能被存储在/usr/lib64下;
    库的头文件一般会被存储在/usr/include下或者其子目录下;

    库的分类:静态库和共享库

    1、静态库

    命名规则:libxxx.a

    1)生成静态库及使用

    (1)先将所要生成库文件的.c文件编译成.o文件;
    (2)创建静态库(使用命令ar)

    ar crv libxxx.a xxx.o xxx.o
    
    • 1

    c:创建库
    r:将方法添加到库中
    v:显示过程
    (3)使用静态库

    gcc -o main main.c -L. -lxxx    //(main为文件名示例)
    
    • 1

    -L:指定库的存储位置;
    -l:指定库的名称(不需要lib和扩展名.a)

    示例:
    在这里插入图片描述
    在这里插入图片描述

    2)静态库缺点

    当你同时运行许多应用程序并且它们都使用来自同一个函数库的函数时,内存中就会有同一函数的多个副本。
    而且在程序文件自身中也有多份同样的副本,这将消耗大量宝贵的内存和磁盘空间;

    2、共享库

    命名规则:libxxx.so

    1)静态库生成及使用

    1)先将所有要生成库文件的.c文件编译成.o文件;
    2)打包生成共享库(gcc)

    gcc -share -fpic -o libxxx.so xxx.o xx.o
    
    • 1

    3)共享库的使用

    gcc -o main main.c -L路径 -l库名 (其中main为文件名)
    
    • 1

    注意:共享库一定要放到标准路径下:

    sudo mv libxxx.so /usr/lib
    
    • 1

    补充了一个命令:查看使用了哪些共享库 ldd

    ldd main
    
    • 1

    静态库和共享库的区别

    静态库:方法包含到库里面,体积大;

    共享库:方法没有包含进去,只是做了一个标记,体积小;

    共享库如果10个应用程序共享,那么磁盘上只有一份共享的库文件,而且运行加载时在内存中只加载了标记了的这一份库文件;
    而静态库,就是这10个应用程序都包含了这个库文件,那么10份的库文件都放在磁盘上了(占用磁盘空间),而且运行加载的时候占用内存空间(10份库文件都要加载);

    共享库便于升级;

  • 相关阅读:
    【Django笔记】5 Django模板
    157条超实用Python代码实例。问题+实例解答+原理解析+补充知识
    Python合并多个Excel文件中的指定sheet
    ava单例模式之总有你想不到的知识
    杭电多校6 F - Maex (树形DP)
    团队建设游戏大全
    vue3,axios获取的数据渲染不到页面上
    超好用的IDEA插件推荐!自带API调试功能
    java并发编程学习五——volatile
    Windows与网络基础-12-13-NTFS文件及文件夹权限
  • 原文地址:https://blog.csdn.net/kyrie_sakura/article/details/126760054