我有一个32位的Linux虚拟盒,我正在编译我的Qt c ++代码。
我正在将目标文件复制到64位的Linux机箱(32位可执行文件仍应在此PC上运行)。
构建使用动态链接,因此我将开始复制我需要的Qt lib文件。我打算通过运行程序手动执行此操作并让它告诉我哪些lib文件丢失+我知道我需要的许多文件因此不会花很长时间(通常)。
所以在我的64位盒目标文件夹中,我有文件:
Rpe
所以我运行名为“Rpe”的可执行文件并抱怨:
./Rpe: error while loading shared libraries: libQt5Multimedia.so.5: cannot open shared object file: No such file or directory
我预计会发生这种情况,然后我将文件libQt5Multimedia.so.5从我的32位linux qt lib文件夹复制到我的64位Linux机器上的目标目录中。在我的目标文件夹中,我现在有文件:
Rpe
libQt5Multimedia.so.5
我现在再次运行Rpe可执行文件,我希望它能够抱怨一个不同的lib文件,但是仍然抱怨找不到相同的libQt5Multimedia.so.5
文件。
我在这里做错了什么?
修改-1
LDD输出:
adadacha@duanedibbley:~/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)
adadacha@duanedibbley:~/sandbox$
答案 0 :(得分:1)
我会为你的"产品"创建一个目录。与bin
子目录中的可执行文件以及lib
子目录中的Qt库(以及任何其他库)。
在父目录中,我将添加一个包装脚本来设置$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" $*