Linux动态库文件 soname realname linkname 详解

先明白动态库文件的3个名字
soname  :通过gcc/g++ -soname,libtest2.so.1 设置他是程序中连接文件的时候找的文件,本身为一个连接,他包含大版本,如果任何小版本的变化,直接替换到
          realname,然后ln -s 建立同样的soname 到新的realname文件即可,不需要重新编译程序。
realname:是动态库文件的真实的名字及-o libtest2.so.1.1 生成的,sonanme 软连接指向它,虽然程序连接的时候找到的soname但是通过连接找到实际的
          realname,他包含大版本和小版本。
linkname:这个可有可无,但是如果要,他不包含版本信息,在g++的时候应该使用这个名字,避免版本改动重新编译makefile,如果哪天大版本也发生了变化
          使用linkname是版本无关的任然能够编译通过。我们只需要重新建立linkname的指向到新版本即可
 比如:
libtest2.so.1.1 为realname
 libtest2.so.1  为soname
 libtest2.so    为linkname
编译或者使用makefile的时候应该尽量使用linkname,而不是使用realname

g++ main.cpp libtest2.so

建立linkname
如 lns -s  libtest2.so.1.1 libtest2.so
这里的libtest2.so 就是一个link name
那么我们编译的时候
 就是
g++ main.cpp libtest2.so 代替掉第四步


 但是一般情况下linkname soname realname都在同一个目录下,这里只是想说明
 程序执行的时候要找的只是soname的位置,而soname指向了realname
       
最后
  g++ t2.cpp -fPIC -shared -o libtest2.so.1.10 不生成soname 的方式,不推荐这种方式,这种方式

猜你喜欢

转载自www.linuxidc.com/Linux/2016-06/132669.htm