5
在編譯過程中,搜索路徑中可能存在多個庫實例。鏈接器按照什麼順序處理搜索路徑中包含的目錄?有問題的平臺是Sun OS。鏈接器以哪種順序處理庫目錄?
在編譯過程中,搜索路徑中可能存在多個庫實例。鏈接器按照什麼順序處理搜索路徑中包含的目錄?有問題的平臺是Sun OS。鏈接器以哪種順序處理庫目錄?
這些目錄按照在命令行中指定的順序進行搜索。在默認目錄之前搜索命令行上指定的目錄。無論選項出現的順序如何,所有-L選項都適用於所有-l選項。 LD_LIBRARY_PATH也可以用來補充庫搜索路徑。目錄搜索停在包含匹配庫的第一個目錄。
LD_LIBRARY_PATH是棘手的,但:
LD_LIBRARY_PATH
其中的目錄列表以搜索與 -l選項指定的庫。多個目錄 由冒號分隔。在最 一般情況下,它會包含由 分號隔開的兩個 目錄列表:
dirlist1; dirlist2
如果LD被稱爲與任意數量-L出現的,如:
ld . . . -Lpath1 . . . -Lpathn . . .
那麼搜索路徑排序爲:
dirlist1 path1 . . . pathn dirlist2 LIBPATH
當目錄列表不包含分號時,它是 解釋爲dirlist2。
LD_LIBRARY_PATH還用於指定庫搜索目錄爲 運行時鏈接程序。也就是說,如果在 環境中存在 LD_LIBRARY_PATH,運行時鏈接將 之前,其默認目錄下搜索,在其指定的目錄, ,爲 共享對象與執行程序 鏈接。
請閱讀更多關於here。
只是爲了確認,LD_LIBRARY_PATH在所有-L選項之後是否被認爲是正確的? – Leonid 2010-10-05 16:28:21
不,不是。它取決於它是否包含分號。如果不是,那麼它會在所有-L之後執行,否則在分號前首先列出,然後是所有-L選項,然後在分號後列出。我會更新我的答案,因爲在這個大文件中很難找到它。另請注意,這適用於Sun鏈接器,不適用於GNU的鏈接器。我不確定你正在使用哪一個。 – 2010-10-05 16:32:08