问题标签 [ldd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 如何配置 Qt 项目以减少编译后的二进制文件的依赖关系?
- MY_OS = KUbuntu 13.10 x86_64
- QT_VERSION = 5.2.0
我有一个要编译的 Qt 项目。项目很小,几乎是HelloWorld。
当我编译它时,我得到的结果二进制文件有很多依赖项,即使重新分发了 Qt 库,它也不能在干净的 KUbuntu 13.10 x86_64 上工作!
所以我决定从另一个 Qt 项目中学习一些东西——我下载了源代码并编译了它的otter-browser—— 结果与我的项目相同。为了比较,我下载了一个 otter-browser 的 deb 包并从中提取了二进制文件。
这是打包在 deb 中的二进制文件的 ldd 输出:
这是我自己编译的 ldd 输出(我尝试过 CMake 和 Qmake - 没有区别,发布\调试版本 - 相同)
二进制文件的大小相当小 - 2.1 Mb(deb)对 1.6(由我编译)。这意味着所有这些库都没有静态链接到 deb 二进制文件(恕我直言,否则大小约为 10-15Mb)
所以我想知道如何将项目编译为只有 Qt Libs 和一些琐碎的东西,如 libbstdc++、libgcc、libc 依赖项?
如果我错过了对项目部署的一些基本了解,请随时提供一些链接而不是冗长的答案。
谢谢!
c - NetBSD:编译 cwm 后出现动态库错误
我编译了原始的 cwm tgz 包(不是 netbsd 包)
可以正常工作。启动 cwm 后
错误
出现。ldd 输出为:
其中“未找到”直接指的是 cwm 二进制文件。它已与命令链接
所以链接器应该找到 libX11 和 libXext。
装载机为什么会抱怨?
python - 正则表达式提取文件名中的“++”损坏的文件名
我正在开发一个实用程序来帮助其他人解决依赖地狱。我可以通过 ldd 提取 UNIX 路径输出,但在一种情况下,我的正则表达式无法处理文件名中 2 + 的存在。我的正则表达式如下:
有什么想法可以修改它来处理 + 吗?
测试数据为:
如果有人有意见,请提前致谢。
solaris - 未找到符号 (ldd),但它存在 (nm)
我的应用程序抱怨找不到符号:
ldd 也是这样说的:
但是,符号在那里 - 这就是 nm 所说的:
但正如你所看到的:Shndx=UNDEF。这意味着什么?我想如果某些东西是未定义的,那它根本就不存在。但不知何故它就在那里,虽然我的应用程序找不到它。
系统:Solaris 10 / UltraSPARC 我的应用程序和所有库都是 64 位的,/foo 在 LD_LIBRARY_PATH_64 中(/bar 不在)。
编辑:同时我知道 UNDEF 就像“需要在另一个库中解决”。而且我还找到了真正具有符号_ 1cDstdEcerr的lib - 它是libCstd.so,它位于/usr/lib 中。或者更准确地说(因为我们需要 64 位变体)/usr/lib/64. 因此它位于 crle 显示的系统默认库搜索路径之一中。现在的问题是:当包含符号的库在系统的搜索路径中时,如何无法解析符号?
linux - 如何解决由于 Linux 中包含多个版本的库而发生的版本冲突
在我的项目中,我试图使用两个已经编译和生成的库。让我们说 liba.so(我们自己的库在某个时候创建)和 libssl.so.10。(它在 Linux 中可用)。
现在 liba.so 具有依赖项 libcurl.so.3 和 libssl.so.10 具有依赖项 libcurl.so.4(最新)
libcurl.so.3 和 libcurl.so.4 在系统中都可用。
因此,当我尝试在我的项目中同时使用它们时,我遇到了版本冲突。是预期的吗?如果是,我该如何解决这个问题?
有没有办法用最新的 libcurl.so.4 修改 liba.so 依赖项而无需再次构建这个库?或者我是否需要使用最新的 libcurl.so.4 再次构建 liba.so?
谢谢你的帮助
linux - CentOS - 程序找不到丢失的库,但 ld.conf 指向它
当我在/opt/Qt5.1.0/5.1.0/gcc_64/plugins/sqldrivers/libqsqlmysql.so上运行 ldd 时,我看到它找不到 libmysqlclient_r.so.16
所以 libmysqlclient_r.so.16 丢失了......所以我做了一个“find / -name libmysqlclient_r.so*”并发现:
/usr/lib64/mysql/libmysqlclient_r.so
所以看来我的程序没有找到so文件。所以我查看了我的 /etc/ld.so.conf.d/ 并找到了包含以下内容的 maria conf 文件:
/usr/lib64/mysql
这不是意味着 linux 加载器应该找到丢失的库文件吗?上面的程序需要 libmysqlclient_r.so.16 ,而 libmysqlclient_r.so 在 /etc/ld.so.conf.d/mariadb-x86_64.conf 提供的LD路径上
这里缺少什么链接?
更新:我添加了从 .so.16 到 .so 的符号链接,但仍未解决:
并且“ldconfig -v | more”显示(只是部分):
我不明白这行libmysqlclient.so.18 -> libmysqlclient_r.so.16 - 为什么 _r.so.16 没有列出?我很接近......只是无法弄清楚最后一点!
linux - 我需要列出在 UNIX/Linux 中具有链接到它们的指定共享库的程序(如 ldd,反之亦然)
unix/linux 中的 ldd 命令列出了程序的所有动态链接库。
如何确定相反的问题:
链接到指定共享库的程序列表是什么?
例如,我需要一种获取使用“libz”的程序列表的方法。
有这个命令吗?
perl - 奇怪的 rpm 要求:perl(a)
我将我公司 icinga 安装的几个部分打包为 RPM,用于从中央监控解决方案到分布式解决方案的事务。
在此过程中,我轻松地打包了 nagios 插件文件夹,并且我发现新版本的 rpmbuild 使用 ldd 自动计算需求。
现在我的包有大量未满足的依赖项,主要是 perl 模块。其中一些要求是神秘的或模棱两可的:我在谷歌或存储库中找不到任何关于它们的信息:
我想我可以找出其中的大部分,但 perl(a)。
任何帮助,将不胜感激。
linux - Linux:如何删除共享库版本依赖
假设我有一个libxxxx.so
依赖于其他一些共享库的文件,例如:
现在,我将它放在libxxxx.so
另一个包含这些库的盒子上,这些库直接由 Samba RPM 安装。但仍然抱怨它们不可用(这是实际的错误输出)。我该如何解决?ldd
linux - 有没有办法确定 Linux 上的库使用的线程本地存储模型
有没有办法在 Linux 上查询共享库的 TLS 模型?(例如使用 ldd 或其他工具)。
我在使用“initial-exec”模型加载太多库时遇到问题,并且想确定哪些第三方库使用此模型(因此我可以释放一些插槽,例如通过静态链接)。
这会导致错误:
看到这个问题。