2015-02-06 75 views
1

我有一個系統範圍libc++.so/usr/lib64。我想將我的二進制文件與位於其他地方的另一個libc++.so鏈接起來,比如$HOME/.local/lib。另外,我想能夠像以前一樣找到所有其他庫,假設$HOME/.local/lib僅包含libc++.so如何更喜歡一個庫位置與另一個位於Clang的位置?

我試圖做這樣的:clang++ -L$HOME/.local/lib -lc++,但編譯器仍然鏈接到/usr/lib64/libc++.so


如何強制編譯器(或鏈接器)鏈接到特定的庫位置?

回答

1

-L將目錄添加到鏈接器使用的搜索路徑。這對運行時使用的搜索路徑沒有影響。在運行時,搜索路徑,依次是:

  1. 環境變量中可執行文件規定LD_LIBRARY_PATH
  2. rpath
  3. 系統庫路徑

雖然你可以達到你想要什麼指定環境變量LD_LIBRARY_PATH=$HOME/.local/lib,這是一個不好的解決方案,因爲它修改了所有可執行文件的搜索路徑。指定rpath是一個更清潔的解決方案,因爲它隻影響可執行文件的行爲。您可以通過工具鏈的鏈接器選項來完成此操作,這可能是-rpath。所以命令將是clang++ -rpath $HOME/.local/lib -lc++

+0

這不是我正在尋找的。我不想硬編碼rpath或影響運行時行爲。我想爲鏈接器指定確切的庫,因此它在進行鏈接時使用它 - 而不是另一個具有相同名稱的庫。 – 2015-02-06 12:00:40

+0

你爲什麼認爲它沒有使用這個庫來鏈接?也許在問題中增加一些細節,說明你是如何診斷問題的,以及以何種方式表現出與你預期的不同。 – Pradhan 2015-02-06 17:46:24

相關問題