加载共享库时出错:libQt5Multimedia.so.5:无法打开共享对象文件:没有这样的文件或目录
error while loading shared libraries: libQt5Multimedia.so.5: cannot open shared object file: No such file or directory
我有一个 32 位 linux Virtual Box,我正在上面编译我的 Qt c++ 代码。
我正在将目标文件复制到 64 位 linux 盒子(32 位可执行文件在这台电脑上应该仍然 运行)。
构建使用动态链接,所以我打算开始复制我需要的 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 位 [=40] 上的目标目录=] 框。在我的目标文件夹中,我现在有文件:
Rpe
libQt5Multimedia.so.5
我现在再次 运行 Rpe 可执行文件,我希望它抱怨不同的 lib 文件,但它仍然抱怨找不到相同的 libQt5Multimedia.so.5
文件。
我做错了什么?
EDIT-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$
我会为您的 "product" 创建一个目录,其中可执行文件位于 bin
子目录中,Qt 库(以及任何其他库)位于 lib
子目录中.
在父目录中,我将添加一个包装脚本来设置 $LD_LIBRARY_PATH
并执行二进制文件(未测试):
#!/bin/sh
dirname="$(dirname "[=10=]")"
exename="$(basename "[=10=]")"
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"$dirname/lib"
export LD_LIBRARY_PATH
exec "$dirname/bin/$exename" $*
我有一个 32 位 linux Virtual Box,我正在上面编译我的 Qt c++ 代码。
我正在将目标文件复制到 64 位 linux 盒子(32 位可执行文件在这台电脑上应该仍然 运行)。
构建使用动态链接,所以我打算开始复制我需要的 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 位 [=40] 上的目标目录=] 框。在我的目标文件夹中,我现在有文件:
Rpe
libQt5Multimedia.so.5
我现在再次 运行 Rpe 可执行文件,我希望它抱怨不同的 lib 文件,但它仍然抱怨找不到相同的 libQt5Multimedia.so.5
文件。
我做错了什么?
EDIT-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$
我会为您的 "product" 创建一个目录,其中可执行文件位于 bin
子目录中,Qt 库(以及任何其他库)位于 lib
子目录中.
在父目录中,我将添加一个包装脚本来设置 $LD_LIBRARY_PATH
并执行二进制文件(未测试):
#!/bin/sh
dirname="$(dirname "[=10=]")"
exename="$(basename "[=10=]")"
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:"$dirname/lib"
export LD_LIBRARY_PATH
exec "$dirname/bin/$exename" $*