-1

我的 Qt 应用程序应该在没有安装 Qt 甚至具有旧版本 glibc 等的 Linux 发行版上运行。所以我决定用我的应用程序分发这些库。如何获得我的应用程序的完整依赖项列表,包括 Qt 和 glibc 等系统库的依赖项?还有其他方法可以让我的应用程序在没有 glibc 和其他预期版本包的 Linux 发行版上运行吗?

4

2 回答 2

1

这是可能的,但有点棘手,特别是如果你也需要 glibc。在这种情况下,您甚至需要确保不仅 libc 是合适的,而且还需要带上相应ld的“so”。否则,您可能会在 libc 入口点之后但在您的 main 函数之前遇到段错误。

本质上,当您尝试运行您的应用程序时,您将看到缺少的库,直到您添加所有库。

尝试:ldd -r foo-> 这将告诉您可执行文件或库需要哪些库。在这里你可以找到它的手册页

这是我系统中的一个示例:ldd -r /usr/lib/libQt5Quick.so.5.1.0

linux-vdso.so.1 (0x00007fffbb3fe000)
libQt5Qml.so.5 => /usr/lib/libQt5Qml.so.5 (0x00007f376576b000)
libQt5Network.so.5 => /usr/lib/libQt5Network.so.5 (0x00007f3765433000)
libQt5Gui.so.5 => /usr/lib/libQt5Gui.so.5 (0x00007f3764e13000)
libQt5Core.so.5 => /usr/lib/libQt5Core.so.5 (0x00007f3764800000)
libQt5V8.so.5 => /usr/lib/libQt5V8.so.5 (0x00007f376415a000)
libGL.so.1 => /usr/lib/libGL.so.1 (0x00007f3763e2c000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f3763b27000)
libm.so.6 => /usr/lib/libm.so.6 (0x00007f3763824000)
libc.so.6 => /usr/lib/libc.so.6 (0x00007f376347a000)
libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f376325b000)
libz.so.1 => /usr/lib/libz.so.1 (0x00007f3763045000)
libssl.so.1.0.0 => /usr/lib/libssl.so.1.0.0 (0x00007f3762dd9000)
libcrypto.so.1.0.0 => /usr/lib/libcrypto.so.1.0.0 (0x00007f37629ce000)
libpng16.so.16 => /usr/lib/libpng16.so.16 (0x00007f3762799000)
libicui18n.so.51 => /usr/lib/libicui18n.so.51 (0x00007f3762398000)
libicuuc.so.51 => /usr/lib/libicuuc.so.51 (0x00007f3762021000)
libpcre16.so.0 => /usr/lib/libpcre16.so.0 (0x00007f3761dc4000)
libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f3761bc0000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x00007f37618c1000)
librt.so.1 => /usr/lib/librt.so.1 (0x00007f37616b9000)
libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f37614a3000)
/usr/lib64/ld-linux-x86-64.so.2 (0x00007f3766166000)
libnvidia-tls.so.325.15 => /usr/lib/libnvidia-tls.so.325.15 (0x00007f376129f000)
libnvidia-glcore.so.325.15 => /usr/lib/libnvidia-glcore.so.325.15 (0x00007f375ebbf000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x00007f375e884000)
libXext.so.6 => /usr/lib/libXext.so.6 (0x00007f375e671000)
libicudata.so.51 => /usr/lib/libicudata.so.51 (0x00007f375cf27000)
libpcre.so.1 => /usr/lib/libpcre.so.1 (0x00007f375ccbc000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00007f375ca9d000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x00007f375c898000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x00007f375c692000)
于 2013-09-06T08:12:05.473 回答
0

glibc如果没有;您不太可能让您的应用程序在 Linux 系统上运行。没有其他可能的完整libc实施方案。也就是说,ldd在您的二进制文件上使用该命令;它将列出二进制文件需要的所有动态库以及该系统上已解决的版本。

于 2013-09-06T08:12:49.287 回答