2012-06-02 40 views
4

例如,我創建了一個名爲的共享庫libXXX.so.0.0.0,其中soname爲libXXX.so.0。那麼,是否需要創建一個名爲的符號鏈接libXXX.so.0並讓它指向真正的共享庫?或者我只需要創建一個名爲的符號鏈接libXXX.so如何控制Linux上的共享庫版本問題?

此外,如果我更新庫到libXXX.so.0.0.1

  1. 如果我安裝的系統庫路徑上的共享庫,如 /lib/usr/lib,如何更新符號鏈接?使用 ldconfig

  2. 如果我在當前的本地文件夾上安裝共享庫,如何更新符號鏈接 ?

順便說一句,如何控制Makefile中的版本問題?我的意思是我需要添加一些命令,如ln -sldconfig

回答

3

是的,創建一個名爲libXXX.so.0的符號鏈接指向libXXX.so.0.0.0

如果您希望人們能夠構建與該庫鏈接的程序,那麼還要創建一個名爲libXXX.so的符號鏈接,指向libXXX.so.0

libXXX.so.0符號鏈接將被程序加載器使用,因爲這是程序將要查找的soname。

libXXX.so符號鏈接鏈接器時,它正在建設一個程序中使用,因爲這是鏈接器是如何工作的歷史慣例。

此外,如果我將庫更新到libXXX.so.0.0.1,該怎麼辦?

然後,您重新制作libXXX.so.0符號鏈接,使其指向libXXX.so.0.0.1。沒有別的東西需要改變。由於libXXX.so符號鏈接指向libXXX.so.0它將自動也指向新的庫。

如何更新符號鏈接?

如果您使用某些打包系統(RPM,...)安裝新庫,則使用打包系統爲管理符號鏈接提供的任何功能。如果您只是使用腳本或Makefile節,則只需使用rm -f舊的符號鏈接,然後使用ln -s即可。

+0

非常感謝您的回覆!順便說一下,** ldconfig **命令的工作方式和時間? – injoy

+1

** ldconfig **管理soname到路徑名轉換的緩存。(運行** ldconfig -p **查看這些項目。)它不知道或關心這些路徑名指向的微版本文件。此緩存可以減少在程序啓動時查找庫所需的時間,因爲加載器不再需要遍歷缺省庫目錄列表,以查找名稱與程序需要的soname相匹配的文件。 – ottomeister

+0

我不完全理解@ottomeister評論。 ldconfig使得緩存對於程序在啓動時鏈接更快。還行吧。但是,ldconfig是否也查找新版本的庫?例如。我應該在安裝新庫版本時手動處理符號鏈接,還是將ldconfig自動爲我執行?我也相信我在手冊中找到了答案:'ldconfig創建了必要的鏈接並緩存到最近發現的共享庫中,但是您能否確認我沒有看到錯誤? – chao