5.理解什么叫依赖---动态链接库

时间:2022-05-19 02:26:15

前戏:

今天聊一聊动态链接库!

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

    5.理解什么叫依赖---动态链接库

     

    问:失败原因是操作系统无法找到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/

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

5.理解什么叫依赖---动态链接库

 

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

    

 

尾声:

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