2014-09-13 106 views
1

我正在嘗試製作我的源代碼樹的Qt5部分,所以我沒有在我的機器上安裝它,只是從源代碼控制中複製它。我有一個問題,當我嘗試運行uic.exe:uic無法找到共享庫

[email protected]:~/ct/LinuxLibs/Qt/bin > ./uic 

    ./uic: error while loading shared libraries: libQt5Core.so.5: cannot open shared object file: No such file or directory 

我仍然得到同樣的錯誤,甚至當我在libQt5Core庫複製到bin目錄。 uic如何尋找共享庫?有什麼我需要設置來解決它的環境變量?

+0

您可以使用'export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:$ HOME/ct/LinuxLibs/Qt/bin'設置二進制文件搜索當前bin目錄中的庫 - 它隻影響當前終端。你會更好地通過包管理器安裝;或者如果編譯將其手動安裝到由鏈接器緩存 – Petesh 2014-09-13 15:01:53

+0

導出的其中一個標準位置,export LD_LIBRARY_PATH已修復它。感謝Petesh! – stiopa 2014-09-13 22:15:34

回答

1

這是另一種不依賴於共享庫的情況,它不在程序支持的定義位置。

如果您打算將文件複製到與可執行文件相同的目錄中,快速解決方案是引用庫加載路徑中的目錄;例如如果二進制是$HOME/foo,你這樣做:

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}$HOME/foo 

這增加或使$HOME/foo運行時,連接的負載路徑。因此,您運行的任何程序都將在此目錄中查找庫以及OS的默認設置(由ld.so配置定義)以及在應用程序本身內定義的路徑(rpath)。

如果你要遵循這條路線,你可以做的是將二進制文件移動到target.bin,創建一個目標bash腳本,它自動調用bin文件;例如

#!/bin/bash -p 
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}${LD_LIBRARY_PATH:+:}$(dirname $0) 
exec $0.bin "$*" 

允許您更改二進制文件搜索位置的輔助機制;而不需要環境變量插入是修改二進制文件,以便它在不同的位置進行搜索;這利用了運行時鏈接程序中的一些功能(查找庫)。

有一個名爲chrpath的程序,可以由各種軟件包管理器添加,它允許您直接編輯rpath。在這種情況下;您可以通過改變二進制的附加搜索路徑:

chrpath -r '$ORIGIN' foo 

這意味着,該方案將看在同一個目錄中的二進制文件.so文件,從而使其能夠運行。