zoukankan      html  css  js  c++  java
  • 静态库与动态库

    静态库复制静态库作为程序代码段的一部分,在可执行程序运行前就已经加入到执行码中,

        成为执行程序的一部分

        1.优点:将函数库中的函数本地化,寻址方便,速度快,等于字典一函数使用效率

        2.缺点:笑话系统资源较大,每个进程使用静态库都要复制一份,无端浪费内存

        3.使用场景:多用于核心程序,保证时效性,可以忽视空间

    ar rcs libmylib.a file1.o

    动态库(共享库)

      机制:共享代码(不共享数据)

      优点:节省内存(共享),易于更新(动态链接)

      缺点:相较于静态库调用速度略慢(延迟绑定机制)

      使用场景:1.对程序执行的速度要求不是特别强烈,而相对于系统资源有一定要求的场景

           2.对于更新比较频繁的程序

              1)停止运行程序

              2)使用新库覆盖旧库,保证“接口”一致

              3)重新启动程序

      重点强调:1.动态库是否加载到内存,取决于程序是否运行

           2.动态库加载到内存的位置不固定

    共享库的创建比较简单,基本有两步。首先使用-fPIC或-fpic创建目标文件,PIC或
    pic表示位置无关代码,然后就可以使用以下格式创建共享库了: gcc -share -Wl,-
    soname,your_soname -o library_name file_list library_list
    gcc -fPIC -c a.c
    gcc -fPIC -c b.c
    gcc -shared -Wl -o libmyab.so a.o b.o
    加载共享库方法:
    1.拷贝自己制作的共享库到/lib或者/usr/lib
    2.临时设置LD_LIBRARY_PATH, export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径
    3.永久设置,把export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径 设置到∼/.bashrc
    或者/etc/profile
    4.设置/etc/ld.so.conf, 把库所在路径追加到此配置文件里
  • 相关阅读:
    【STL源码剖析读书笔记】【第6章】算法之inplace_merge算法
    Python学习 过程中零散知识点的总结
    Python 从零学起(纯基础) 笔记 (二)
    Python 从零学起(纯基础) 笔记(一)
    用select实现监控终端输入
    实现socket非阻塞设置
    exit(0)、exit(1)、exit(-1)的区别
    解决bind错误 bind: Address already in use
    UDP编程中client和server中使用recvfrom和sendto的区别
    linux安装zookeeper
  • 原文地址:https://www.cnblogs.com/xiangtingshen/p/10415915.html
Copyright © 2011-2022 走看看