日期:2014-05-16  浏览次数:20713 次

关于程序启动加载so文件的问题
编译时我用的是gcc   -l <name> ,但是程序运行时偏偏加载lib <name> .so. <version> ,为什么后面会多出一个版本号阿?

------解决方案--------------------
其实可能是同一个文件。你ls -l看一下是否链接文件。类似这样:
lrwxrwxrwx 1 root root 16 Nov 9 2006 libpcap.so -> libpcap.so.0.8.1
lrwxrwxrwx 1 root root 16 Nov 9 2006 libpcap.so.0 -> libpcap.so.0.8.1

上面的例子,libpcap.so 和libpcap.so.0都是指到同一个文件libpcap.so.0.8.1,后者才是真正的库文件,之所以建一些链接,是为了便于程序链接,这样就不会依赖于具体的版本号。
------解决方案--------------------
楼上说的没错, 这些都是建的link文件, 方便程序连接用.
------解决方案--------------------
可以看看共享库几个名称直接的关系:
soname搜名:lib+库名+.so+version
如libtest.so.1

实名 搜名+.+子版本号+.+发布号 如libtest.so.1.0.1

搜名通常是实名符号连接。
连名 linkername 通常是没有任何版本号名称,如libtest.so

因此,程序运行时候,找的是搜名。用lDD可以看到依赖的是搜名。