zoukankan      html  css  js  c++  java
  • linux下的静态库和动态库

    一、linux下的静态库
      静态库中的被调用的函数的代码会在编译时一起被复制到可执行文件中去的!!可执行文件在运行不需要静态库的存在!
     
    二、linux下动态库的构建和使用
    1、动态库的构建
       gcc  -fPIC  -shared    -o  lib库名.so   源文件列表
     
    例:
       gcc   -fPIC  -shared  -o  libmylib.so  max.c  min.c
     
    2、动态库使用
       gcc    -o  最终的可执行文件  源文件列表  -L 动态库的目录  -l库名
     
    例子:
    已经将int  getMax(int,int)和getMin(int,int)打包在了libmylib.so中了,现在你即可把libmylib.so复制希望用你的库函数的人了!!
     使用你的库函数的人可能回这样使用:
       //test.c
              int getMax(int,int);
              int main()
    {
    int x,y;
     int max;
    scanf(“%d%d”,&x,&y);
    max=getMax(x,y);//getMax是在你的库函数中已经实现了的,所以不用别人在实现了,直接拿来用就行了!!
    printf(“max=%d ”,max);
    return 0;
    }
     
    执行该命令:gcc  -o  test  test.c 会报错:提示找不到getMax;
    正确的命令:gcc  -o  test test.c  -L libmylib.so存放的目录   -lmylib
    错误的写法:gcc  -o  test test.c  -L libmylib.so存放的目录   -llibmylib.so
     
     
    查看动态库中的标号:
    readelf  -s  动态库名 
     
    查看可执行文件运行时所依赖的动态库:
    (1)ldd  可执行文件名
    (2)readelf  -d   可执行文件名|grep  Shared
     
    3、动态链接的可执行文件的运行(任选一种即可)):解决的是可执行文件在运行时找动态库
    (1)将动态库复制到/lib或/usr/lib目录下;(在嵌入式开发,推荐用此方法!)
         命令:
    正确:sudo  cp  libmylib.so  /lib/ 
    错误:sudo  cp  libmylib.so  /lib/mylib.so
    错误:sudo  cp  libmylib.so  /lib/libmylib
    (2)将动态所在目录路径添加到环境变量LD_LIBRARY_PATH
         例如:     
         export  LD_LIBRARY_PATH=动态库所在的目录:$LD_LIBRARY_PATH
         如果需要LD_LIBRARY_PATH一直生效,则需把上面的语句添加到~/.bashrc文件中末尾去。
         命令:
    gedit   ~/.bashrc
    偷懒的办法(慎用):
    echo  export LD_LIBRARY_PATH=$PWD:$LD_LIBRARY_PATH>>~/.bashrc
    (3) 将动态所在的目录添加到/etc/ld.so.conf中,启动会自动加载/etc/ld.so.conf配文件,如果需要立即生效,执行命令:ldconfig
    命令:
    sudo gedit  /etc/ld.so.conf
     
    三、静态库、动态库使用上的区别
    静态库被调用的代码生成可执行文件时会被立即复制到执行性文件中去;
    动态库被调用的代码在可执行文件运行时才会被加载到可执行文件中去。
  • 相关阅读:
    再论使用Oracle Instant Client连接Oracle
    再谈业务逻辑架构模式(事务脚本,表模块,活动记录,领域模型)
    业务逻辑架构模式(事务脚本,表模块,活动记录,领域模型)
    .net程序集组成与内存布局
    多参的实现原理
    起点
    Windows1[头文件]
    C++中构造函数、析构函数、拷贝构造函数详解
    PHP 开发工具
    写点东西顺便吐槽(很弱很弱的技术文)
  • 原文地址:https://www.cnblogs.com/liangjf/p/7586589.html
Copyright © 2011-2022 走看看