2010-04-08 119 views
1

紅帽5.5 gcc版本4.1.2共享庫創建軟鏈接

我有一個目錄調用lib和在該目錄中我有所有我們從我們的客戶獲得,因爲我們的共享庫(30)使用他們的API。我們鏈接到這個API。

目錄結構:

/usr/CSAPI/lib 

然而,我們的客戶將更新自己的API,因此我們得到的新庫,通常約3或4

當我拿到新的圖書館我一直在做的。是刪除舊的並放入另一個目錄。並將它們替換爲lib目錄中的新庫。

/usr/CSAPI/Old_libs 

新的和舊的將具有相同的名稱。即

libcs.so < old 
libcs.so < new 

有沒有更好的方法來管理它?我正在考慮創建一條軟線,但由於名稱相同,我不確定這會起作用。

非常感謝,

回答

1

符號連接任何作品都處理這是一個非常好的辦法。我會做一些稍微不同的事情。我會創建一個目錄結構,如:

/usr/CSAPI/lib_v1 
/usr/CSAPI/lib_v2 

並在每個這些我會把實際的文件。然後,我將創建一個單獨的目錄:

/usr/CSAPI/lib 

只包含符號鏈接到實際文件lib_v1lib_v2

這樣lib擁有最新版本,但是如果你需要,你可以只需更改LD_LIBRARY_PATH即可使用以前的版本。

2

通常庫版本,而不僅僅是「同名」。

您將在/usr/lib目錄每個版本有一個文件:

/usr/lib/libFLAC.so.8.2.0 
/usr/lib/libFLAC.so.8.2.1 
/usr/lib/libFLAC.so.8.2.2 

然後你符號鏈接庫的主版本的最新次要版本:

/usr/lib/libFLAC.so.8 -> /usr/lib/libFLAC.so.8.2.2 

這樣做的好處是API更改將添加新文件並更新符號鏈接,但如果我需要指定特定的API版本號,則該文件仍然存在。

這不是一成不變的,所以做你的釋放的過程:)

+1

這是假設庫正確開發。我使用了許多沒有正確處理庫版本的公司庫。 – 2010-04-08 05:36:21

+0

很抱歉,沒有版本號。所有庫都以共享庫擴展名即* .so結尾。謝謝。 – ant2009 2010-04-08 05:45:18

+1

在這種情況下,可能使用Klatchko的解決方案,除了符號鏈接整個目錄:/ usr/CSAPI/lib - >/usr/CSAPI/lib _ $ {current_version}而不是symlinking。 – Stephen 2010-04-08 05:49:38