Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 获取Qt应用程序的.so依赖项的完整列表?_C++_Linux_Qt_Shared Libraries - Fatal编程技术网

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

C++ 获取Qt应用程序的.so依赖项的完整列表?,c++,linux,qt,shared-libraries,C++,Linux,Qt,Shared Libraries,我的Qt应用程序应该运行在没有安装Qt的Linux发行版上,甚至应该运行较旧版本的glibc等等。所以我决定将这些库与我的应用程序一起分发。我如何获得应用程序的完整依赖项列表,包括Qt和系统库(如glibc和其他)的依赖项? 还有没有其他方法可以让我的应用程序在没有glibc和其他预期版本包的Linux发行版上运行?这是可能的,但有点棘手,特别是如果您也需要glibc。在这种情况下,您甚至需要确保不仅libc是合适的,还需要带上相应的ld“so”。否则,您可能会在libc入口点之后,但在main

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

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

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

尝试:
ldd-rfoo
->,它将告诉您可执行文件或库需要哪些库。在这里你可以找到它的名字

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

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

使用。使用与系统上安装的不同的
libc
通常不是一个好主意,因为这样做很棘手。另外,Linux的方式是依赖于系统的包管理器来拖入依赖项,而不是将它们与程序捆绑在一起。当您意识到捆绑的
libx11
与机器的X服务器不兼容时,您会怎么做?@LaszloPapp不是预期的方式。我们最终几乎为每个发行版建立了单独的软件包…@artplastika:好的,我只是问了一下,因为没有选择的答案,谢谢。S/他确实有glibc,只是不像S/他写的那样是预期的版本…措辞不清楚;我可以理解你的解释,但它看起来像“没有glibc”。他明确地问:“还有其他方法可以让我的应用程序在没有glibc和其他预期版本包的Linux发行版上运行吗?”注意“预期版本”部分。我看不出有什么不清楚的。谢谢拉兹洛!我需要一些时间来调查所有的依赖关系。当我的应用程序运行时,我会接受你的回答@artplastika:你的应用程序运行了吗?