2011-12-12 40 views
60

gccld提供了許多方法來指定庫的搜索路徑 - 其中包括-rpath-L標誌。手冊頁顯示這兩個標誌之間沒有區別,有效地說每個標誌都向庫搜索路徑添加了一個庫。然而,看起來很奇怪的是,兩個標誌完全一樣,正好是。這兩種選擇之間有什麼區別?-rpath和-L有什麼區別?

+1

也許你正在考慮'-rpath-link'? – ams

回答

68

您必須閱讀手冊頁的一些過時的副本(強調):

-rpath = DIR
           添加目錄到運行庫搜索路徑。這是使用
            0123在鏈接一個ELF可執行文件與共享對象。所有-Rpath
           參數是級聯,並傳遞給運行時接頭,其
           使用它們在運行時查找共享對象。

-L searchdir
--library路徑= searchdir
           路徑searchdir加入的那個LD將搜索路徑列表
           存檔庫和ld控制腳本。

因此,-L告訴ld鏈接時尋找鏈接庫的位置。例如,當您在構建樹中構建庫時,可以使用此庫(例如),該庫將放入正常的系統庫路徑make install。另一方面,--rpath將該路徑存儲在可執行文件中,以便運行時動態鏈接程序可以找到這些庫。當您的庫位於系統庫搜索路徑之外時,可以使用它。

+7

注意事項:1.大多數時候需要'-rpath =/some/weird/path',我們也需要'-L/some/weird/path'。 2.使用'gcc'需要使用'-Wl,-rpath = dir'。 –

+2

我仍然不明白爲什麼兩者都需要。我有和中午一樣的經歷。以上。在編譯時需要哪些信息?除了可能的h-文件,原因。但是,這是我猜想的另一件事... –

+1

@FredrikJohansson對於一個新問題,這是一個合理的主題(假設它當然還沒有被問到)。至少需要可用的符號,但可能還有其他的東西。 – derobert