链接详解--共享库命名
按照共享庫的命名慣例,每個共享庫有三個文件名:real name,soname和linker name。
?
soname是一個符號鏈接的名字,只包含共享庫的主版本號,主版本號一致即可保證庫函數的接口一致,
因此應用程序的.dynamic段只記錄共享庫的soname,只要soname一致,這個共享庫就可以用。
使用共享庫可以很方便地升級庫文件而不需要重新編譯應用程序,這是靜態庫沒有的優點。
注:libc的版本號有一點特殊,libc-2.8.90.so的主版本號是6而不是2或2.8。
?
linker name僅在編譯鏈接時使用,gcc的-L選項應該制定linker name所在的目錄。
有的linker name是庫文件的一個符號鏈接,有的是一段鏈接腳本(libc.so)。
?
示例:
real name:/lib/i386-linux-gun/libc-2.15.so
softname: /lib/i386-linux-gun/libc.so.6
linker name: /usr/lib/i386-linux-gun/libc.so
?
gcc -shared -Wl,soname,libstack.so.1 -o libstack.so.1.0 stack.o push.o pop.o is_empty.o
這樣編譯生成的庫文件是libstack.so.1.0,是real name,soname是libstack.so.1。
需要首先創建linker name:
ln -s libstack.so.1.0 libstack.so
程序編譯需要linker name,程序執行需要soname,最終指向real name。
轉載于:https://www.cnblogs.com/embedded-linux/p/4880966.html
總結
以上是生活随笔為你收集整理的链接详解--共享库命名的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浅谈事务
- 下一篇: Linux Kernel File IO