2011-02-24 40 views
0

背景:的Linux VS的Solaris - 編譯軟件

在工作中我已經習慣了在Solaris 10上合作,我們誰知道他們在做什麼,如果需要的話可以幫忙的系統管理員。

我編的東西,如Apache,Perl和來自源的mod_perl沒有任何問題。

我已經擁有一個紅帽服務器玩和我打的問題。系統管理員目前病了。

我繼續建設軟件時就LD_LIBRARY_PATH擊中問題。目前爲了測試目的,我正在編譯到我的主目錄,因爲我沒有root權限或者在其他地方安裝的權限。

我打算在/ opt下安裝一個區域,就像我們在Solaris上一樣,但我需要sysadmin來爲我們創建這個區域。

我的.bashrc對於LD_LIBRARY_PATH沒有任何幫助,所以我一直在附加一些東西來獲取構建的東西(例如源自ffmpeg)。我一直在閱讀關於這一點,顯然這不是要走的路,它不可靠或什麼。我無權訪問ldconfig(權限被拒絕)。

現在quetions:

什麼是建立在Linux應用程序,使它們不會打破的最佳方式?在/etc/ld.so.conf.d/下創建條目?

誰能給什麼LD_LIBRARY_PATH實際上做了簡要介紹?

回答

0

ld.so(8)手冊頁:

LD_LIBRARY_PATH 
      A colon-separated list of directories in which to search for ELF 
      libraries at execution-time. Similar to the PATH environment 
      variable. 

但說實話,找管理員。如果需要成爲一個。哦,並建立包。

+0

什麼是從源代碼編譯爲一個前綴目錄,並創建一個包有什麼區別?謝謝 – Raoul 2011-02-24 12:37:24

+0

包中包含有關可以在各種情況下使用的文件的元數據,例如超級用戶命令出錯。另外,編譯後的軟件包可以放在一個共同的位置,並根據需要安裝在儘可能多的系統上,而無需重新編譯。 – 2011-02-24 12:39:44

+0

他似乎是一個明智的前進方向。你會說下面的文章是一個體面的教程,以前從未這樣做過的人嗎? http://www.ibm.com/developerworks/library/l-rpm1/ – Raoul 2011-02-24 12:58:58

0

LD_LIBRARY_PATH使單個用戶或單個進程可以在細粒度的基礎上向搜索路徑添加位置。 /etc/ld.so.conf應該用於系統範圍庫路徑設置,即部署應用程序。 (更好的是,你可以將它打包爲rpm/deb,並通過你的發行版平常的軟件包通道進行部署)

通常用戶可能使用LD_LIBRARY_PATH來強制執行他們的程序來選擇不同版本的庫。通常這對於支持庫的調試或檢測版本非常有用,但您也可以使用它將自己的代碼注入第三方代碼。 (有時也可以將其用於惡意目的,如果您可以改變某人的bash配置文件來欺騙他們執行您的代碼,而不會意識到這一點)。

如果某些應用程序將「私有」庫安裝在非默認位置,也就是說它們不會用於正常的動態鏈接,但仍然存在,它們也會設置LD_LIBRARY_PATH。對於這樣的場景,雖然我傾向於選擇dlopen()和朋友。

+0

有什麼區別從源代碼編譯到前綴目錄並創建一個包?謝謝 – Raoul 2011-02-24 12:37:56

+0

創建一個包通常有用於庫的依賴關係跟蹤的規定(都由你的包提供並依賴它)。它還提供瞭解決衝突,如果兩件事情嘗試,並提供相同的文件,它使直接安裝到FHS理智行爲的默認路徑,可避免需要在所有設置任何不尋常的路徑。 – Flexo 2011-02-24 12:59:27

0

設置LD_LIBRARY_PATH被認爲是有害的,因爲(除其他原因):

  1. 你的程序動態鏈接根據您的LD_LIBRARY_PATH。這意味着它可以鏈接到圖書館的特定版本,這恰好在您的LD_LIBRARY_PATH例如/home/user/lib/libtheora.so。如果其他人試圖在沒有您的LD_LIBRARY_PATH的情況下運行它,並最終與默認版本鏈接,這會造成很多混淆。在/usr/lib/libtheora.so
  2. 它優先於任何默認的系統鏈接路徑。這意味着,如果你最終不得不對你狡猾libcLD_LIBRARY_PATH它最終可能會做壞事一樣影響您的帳戶。

正如伊格納西奧說,使用套餐的地方就可以了。這可以避免圖書館的噩夢。