zoukankan      html  css  js  c++  java
  • 5.理解什么叫依赖---动态链接库

    前戏:

    今天聊一聊动态链接库!

    Windows: dynamic   link   library (DLL),后缀?xxx.dll嘛!

    Linux: 是Shared   Library .后缀是啥?xxx.so嘛!

    简单的理解就是:把其封装为类库,其他程序都可以动态调用就完事了

    通用性、封装性,毕竟有些代码不想让别人看到。

    Ps:详细解释 http://bbs.chinaunix.net/thread-1281954-1-1.html

    正文:

    1. 将源文件.c编译成动态链接库.so

      gcc -shared me.c -o libme.so

      主程序会根据头文件名称自动加上lib和.so后缀找寻动态链接库,编译时注意书写

    2. 编译

      联合编译:

      gcc fatsnake.c me.c -o fatsnake

       

      (1)使用动态链接库编译(就不用制定所有源文件了)------------------------手动指定我的动态链接库在哪

      gcc –L /root/ -l me fatsnake.c -o fatsnake

      -L 动态链接库的文件夹位置

      -l 动态链接库的库名 (去除最前面的lib和.so就是库名)

      (2)ldd 主程序名 查看依赖

          ldd fatsnake

       

      问:失败原因是操作系统无法找到libme.so???

      答:其实Linux和windows一样,有个类似system32的系统库文件夹。各种公共类库都放于此

      CentOS中有和windows很类似的两个存放公共库的文件夹

      /lib 内核级

      /usr/lib 用户系统级

      /usr/lib64/ 64位系统才有

    你要把你做好的库 瞎放也没关系,此处暂时演示放在指定公共库

    (3)拷贝到共享库文件夹:将链接库拷贝到制定文件夹下

        cp 源文件 目标文件夹

        cp /root/libme.so /lib

    (4)重新加载链接库

    ldconfig

    详解:http://blog.163.com/cn_prince/blog/static/638790120078289157270/

    此时发现主程序已经与链接库关联上了

     

    Ps:将lib中的libme.so 文件删除,文件运行就失败了! 动态链接库不能删除,否则找不到依赖

        

     

    尾声:

    今天有点累,健身蹲腿累的吧!一会啃会书,洗洗睡吧!

    在人生中,赢家并不是那些有优秀基因的人,或是那些最有天分的人,而是那些最不屈不挠的人!当他们跌倒了,他们总是不断的爬起来,继续做,继续做。 no pain no gains (^ _ ^) !!
  • 相关阅读:
    linq中的AsEnumerable()方法
    c# 一个匿名对象中包含多个子对象的处理方式
    jenkins的安装与启动
    牛客网-2018年湘潭大学程序设计竞赛-F
    poj-1149(最大流)
    hdu-2255(带权二分图)
    bzoj-1191(二分图最大匹配)
    codevs2822
    hdu 5652(并查集)
    hdu—3861(tarjan+二分图)
  • 原文地址:https://www.cnblogs.com/fatsnake/p/5744829.html
Copyright © 2011-2022 走看看