2010-10-01 105 views
24

以下問題How do applications resolve to different versions of shared libraries at run time?,我想知道如何在鏈接命令行上指定要使用哪個版本的庫?如何指定鏈接時使用的庫版本?

比方說,我有

libmy.so.1.0 
libmy.so.1 -> libmy.so.1.0 
libmy.so.2.0 
libmy.so.2 -> libmy.so.2.0 
libmy.so  -> libmy.so.2 

的常用方法來指定與可執行文件鏈接不顯示使用的版本庫。此外,人們很可能想要鏈接最新的版本。因此通常的線路在大多數情況下都能正常工作

gcc app.o -lmy -o app 

鏈接app應該使用庫的版本1的命令行是什麼?

回答

31

鏈接器能夠接受的文件名也

gcc app.o -l:libmy.so.1 -o app 

man ld

-l namespec
--library = namespec
添加歸檔或目標文件由namespec指定給要鏈接的文件列表。此選項可以使用任意次數。 如果 namespec的格式爲:filename,則ld將在庫路徑中搜索名爲文件名的文件,否則它將搜索名爲libnamespec.a的文件的路徑庫 。

我注意到,舊版本不支持的話,那麼請檢查您的系統上man ld-l--library選項。

您也可以鏈接到該文件提到它的全名

gcc app.o /mylibpath/libmy.so.1 -o app 
+10

小心:什麼鏈接器,什麼是運行時dynamicaly解析(什麼'LDD app'會顯示)可能是不一樣的東西。 – 2011-07-09 07:57:44

相關問題