zoukankan      html  css  js  c++  java
  • 静态库与动态库的创建和使用

    库library

    有时看着源代码裸奔,总觉得有点点羞羞。有没有办法给她套件衣服呢?

    那件衣服就是 -> 高大上的(nei)库,想到哪去来。。。

    ------------华丽分割线---------

    库:一个可供使用的各种标准程序、子程序、文件以及它们的目录等信息的有序集合!(百度百科)

    看着晕,其实库就是那种 .lib .dll这些结尾的,它里面封装着许多函数的定义,只是他们已经变成对象文件 如:.o、.obj 。等着链接(link).链接就是把多个.o文件链成一个可执行文件。啊 ,跑偏了。

    总之:库就是许多函数实现的对象文件的集合

     

    库分为两种:静态库,动态库

    静态库:在编译链接时就把库的代码提取出来加入可执行文件中,程序执行不在依赖库。

    动态库:在编译链接时只记录了要用的名字(函数变量)在哪个库,运行时才从库找。

    对比:静态库生成的可执行文件大,库升级后,必须重新产生可执行文件。
              动态库运行时慢,但库可以更新,原可执行文件不用在生成,代码可以重用。window系统很多地方用到动态库(就像.dll文件)

     

    好了,接下来我们就自己制作自己的库把

    静态库:
        1)产生库
            1.1.写程序(一般没main)

    #include <stdio.h>
    extern int a;
    void welcome(const char*name)
    {
        printf("welcome %s
    ",name);
        
    }

     

      
            1.2. gcc -c xxx1.c(产生xxx1.o文件)//xxx自己取名字
                   gcc -c xxx2.c
            1.3. 再写个头文件xxx.h,里面放这些函数和全局变量的声明(extern int a)

     

      

    #ifndef JING_LIB
    #define JING_LIB
    extern int a;
    void welcome(const char*name);
    #endif

     


            1.4.ar -r libxxx.a xxx1.o xxx2.o

      搞定


        2)使用库
            写个程序usexxx.c,包含头文件xxx.h,程序可以调用库中的函数或访问库中的全局变量,然后编译usexxx.c。最后链接usexxx.o和libxxx.a

        gcc -c usexxx.c(-c表示只编译)

        gcc usexxx.o libxxx.a(链接生成可执行文件)
     

    2.动态库(共享库)libxxxx.so
        1).产生库
            1.1 写程序(一般没main)
        gcc -shared -o libxxx.so xxx1.c xxx2.c
        2).使用库
            2.1编译时:
                2.1.1编写usexxx.c
          gcc -c usexxx.c

          gcc usexx.o -lxxx -L

            2.2 运行时:   
        2.2.1设置环境变量LD_LIBRARY_PATH的值为动态库所在的目录

          export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:.

        2.2.2运行可执行文件
               
        3).更新库
            3.1 更新usexxx.c
              gcc -shared xxx1.c xxx2.c -o libxxx.so

      3.2 直接执行可执行文件

      

  • 相关阅读:
    监听器和过滤器
    jdbc电话本项目
    jdbc数据库中的增删改
    servlet实现登陆注册
    Python 数据分析基础小结
    分类模型构建
    回归模型构建
    sklearn——数据集调用及应用
    数据处理——数据集划分
    数据分析——Matplotlib图形绘制
  • 原文地址:https://www.cnblogs.com/firstcxj/p/4822584.html
Copyright © 2011-2022 走看看