• linux静态库与动态库


      库是一种可执行的二进制文件,是编译好的代码。使用库可以提高开发效率。在Linux 下有静态库和动态库。
      静态库在程序编译的时候会被链接到目标代码里面。所以程序在运行的时候不再需要静态库了。因此编译出来的体积就比较大。以 lib 开头,以.a 结尾。使用 ar 命令创建静态库。
      动态库(动态库也叫共享库)在程序编译的时候不会被链接到目标代码里面,而是在程序运行的时候被载入的。所以程序在运行的时候需要动态库了。因此编译出来的体积就比较小。以lib 开头,以.so结尾。使用 gcc 命令创建动态库。

    一、制作静态库

    1.1、新建 mylib.c 文件

    #include
    void mylib(void);
    void mylib(void)
    {
    	printf("This is mylib\n");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.2、将源码.c 文件编译生成.o 文件

      使用以下指令将源码.c 文件编译生成.o 文件

    sudo gcc -c mylib.c
    
    • 1

    在这里插入图片描述

    1.3、使用 ar 命令创建静态库

      使用以下指令创建静态库

    ar cr libmylib.a mylib.o
    
    • 1

    在这里插入图片描述

    1.4、编写测试代码 test.c

      编写测试代码 test.c如下

    #include 
    void mylib(void);
    int main(void)
    {
    	mylib();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    1.5、编译测试文件 test.c

      使用如下指令编译测试文件 test.c

    gcc test.c -lmylib -L .
    
    • 1

    在这里插入图片描述

    1.6、运行测试 a.out

      运行测试 a.out,如下图所示:
    在这里插入图片描述

    二、制作动态库

    2.1、新建 mylib.c 文件

      新建 mylib.c 文件,编辑内容如下所示

    #include
    void mylib(void);
    void mylib(void)
    {
    	printf("This is mylib\n");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.2、将源码.c 文件编译生成.o 文件

      使用以下指令将源码.c 文件编译生成.o 文件

    gcc -c -fpic mylib.c 
    
    • 1

    在这里插入图片描述

    2.3、使用 gcc 命令创建动态库

      使用以下指令创建动态库

    gcc -shared -o libmylib.so mylib.o
    
    
    • 1
    • 2

    在这里插入图片描述

    2.4、编写测试代码 test.c

      编写测试代码 test.c,编辑内容如下所示:

    #include 
    void mylib(void);
    int main(void)
    {
    	mylib();
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    2.5、编译测试文件 test.c

      使用如下指令编译测试文件 test.c

    gcc test.c -lmylib -L .
    
    • 1

      或者使用绝对目录

    gcc test.c -lmylib -L /home/z/myshare/lib/2
    
    
    • 1
    • 2

    在这里插入图片描述

    2.6、运行测试 a.out

      运行测试 a.out,如下图所示:
    在这里插入图片描述

    三、动态库使用

      在动态库使用是,系统会默认去/lib,/usr/lib 目录下去查找动态函数库,如果我们使用的库不在里面,就会提示错误。解决这个问题有两种方法。
      第一种方法:将生成的动态库拷贝到/lib 或者/usr/lib 里面去,因为系统会默认去这俩个路径下寻找。
      第二种方法:把我们的动态库所在的路径加到环境变量里面去,比如我们动态库所在的路径为/home/test,我们就可以这样添加,但是这种方法只在当前设置的窗口有效。

    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/z/myshare/lib/2
    
    • 1
  • 相关阅读:
    javaEE高阶---Spring 更简单的读取和存储对象
    【毕业设计】基于单片机的墨水屏阅读器(单词卡) - 物联网 嵌入式
    Google 开源库Guava详解(集合工具类)—Maps、Multisets、Multimaps
    Guava中这些Map的骚操作,让我的代码量减少了50%
    不要再白嫖Github了
    MySQL服务关闭开机自启,改成手动启动状态
    掌动智能信创测试服务内容是什么
    pytorch编程知识(2)
    电脑加域win10
    【10.31】【VP】Codeforces Round #732 (Div. 2)
  • 原文地址:https://blog.csdn.net/xxxx123041/article/details/133887653