获取Qt应用程序的.so依赖项的完整列表?

时间:2013-09-06 08:09:55

标签: c++ linux qt shared-libraries

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

2 个答案:

答案 0 :(得分:1)

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

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

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

以下是我系统中的一个示例: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)

答案 1 :(得分:0)

如果没有glibc,您很可能无法在Linux系统上运行应用程序。完全libc实施没有其他可能的候选人。也就是说,在二进制文件上使用ldd命令;它将列出二进制所需的所有动态库以及该系统上已解析的版本。