关于soname的注意事项
不同主版本号之间的共享库是完全不兼容的,所以soname只要有主版本号就可以了
so是以主版本号来区分是不是同一个so
不同的大版本号,代表不同的so,可以共存,例如:
liba.so.1
liba.so.2
是可以共存的,代表不同的so(完全不兼容)
链接的时候可以不指定主版本号,这个时候会到相应的链接路径查找最新的so版本,即主版本号最大的soname
关于so的环境变量
LD_DEBUG,用来调试.so(还有一些其它环境变量,可以参考man ld.so)
LD_LIBRARY_PATH(方便开发,export LD_LIBRARY_PATH=`pwd`)
共享对象的两种形式
1 ELF文件(librt.so)
2 脚本文件(/usr/lib64/libc.so)
共享对象的初始化
#define __DLL_START__ __attribute__((constructor))
#define __DLL_STOP__ __attribute__((destructor))
网友评论