1、Windows上是dynamic link library (DLL),后缀?xxx.dll嘛!
2、UNIX或Linux上是Shared Library .后缀是啥?xxx.so嘛!
2、UNIX或Linux上是Shared Library .后缀是啥?xxx.so嘛!
为了好理解我们暂时不要拘泥于动态库的形式 ,我们就理解为把其封装为类库,其他程序都可以动态调用就完事了。
3.编译成so库
gcc -shared me.c -o libme.so
你必须在编译的时候,手动指定我的动态链接库在哪
gcc –L /root/ -l me shenyi.c -o shenyi
-L 动态链接库的文件夹位置
-l 动态链接库的库名 (去除最前面的lib和.so就是库名)
接下来你会发现编译成功了,但是运行依然失败,失败原因是操作系统无法找到.
原因分析:其实Linux和windows一样,有个类似system32的系统库文件夹。各种公共类库都放于此
CentOS中有和windows很类似的两个存放公共库的文件夹
/lib 内核级
/usr/lib 用户系统级
/usr/lib64/ 64位系统才有
你要把你做好的库 瞎放也没关系
成功的做法:
把我们做的SO文件拷贝到这里面去
新命令 cp 源文件 目标文件夹
然后执行ldconfig (这个命令我们后面还会讲到)
暂时姑且认为 linux把动态库缓存起来了。加了新玩意儿需要重新更新缓存
总结:1生成so文件
2手动指定so文件
3使用idconfig缓存一下
4执行