2016-05-24 96 views
2

我有一個32位的linux虛擬盒,我正在編譯我的Qt C++代碼。加載共享庫時出錯:libQt5Multimedia.so.5:無法打開共享目標文件:沒有這樣的文件或目錄

我正在將目標文件複製到64位的Linux機器上(32位可執行文件仍應在此PC上運行)。

構建使用動態鏈接,所以我打算開始複製我需要的Qt庫文件。我計劃通過運行程序手動執行此操作,並讓它告訴我缺少哪些lib文件+我知道我需要的許多文件,所以它不會讓我花太多時間(通常)。

所以在我的64位框目標文件夾我的文件:

Rpe 

所以我跑我的可執行文件,稱爲「RPE」,並抱怨:

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

我希望這樣的事情發生,然後我將我的32位linux qt lib文件夾中的libQt5Multimedia.so.5文件複製到64位Linux機器上的目標目錄中。在我的目標文件夾,我現在有文件:

Rpe 
libQt5Multimedia.so.5 

我現在再次運行RPE可執行文件,我希望它抱怨不同的庫文件,但它仍然抱怨同一libQt5Multimedia.so.5文件不被發現。

我在這裏做錯了什麼?

EDIT-1

LDD輸出:

[email protected]:~/sandbox$ ldd Rpe 
    linux-gate.so.1 => (0xf7731000) 
    libQt5Multimedia.so.5 => not found 
    libQt5Network.so.5 => not found 
    libQt5Xml.so.5 => not found 
    libQt5Core.so.5 => not found 
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xf7616000) 
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xf75f9000) 
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf744a000) 
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xf7404000) 
    /lib/ld-linux.so.2 (0x5661f000) 
[email protected]:~/sandbox$ 
+0

又是什麼'ldd的'說這個庫應該從中加載? – trojanfoe

+0

@trojanfoe好點,添加到我的問題:) –

+0

好吧,看起來你需要將庫添加到'/ usr/local/lib'或某個地方? – trojanfoe

回答

1

我會創建一個目錄爲您的 「產品」,在一個bin子目錄的可執行文件和Qt庫(以及任何其他庫)在lib子目錄中。

在父目錄我想補充一個包裝腳本設置$LD_LIBRARY_PATH和執行二進制(未測試):

#!/bin/sh 
dirname="$(dirname "$0")" 
exename="$(basename "$0")" 

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"$dirname/lib" 
export LD_LIBRARY_PATH 
exec "$dirname/bin/$exename" $* 
相關問題