问题标签 [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.
linux - ldd 命令未显示链接的库
我正在使用以下命令创建一个 .so 文件:
用于创建 .o 文件
用于创建 .so 文件
在创建 .so 文件后,如果我使用 ldd 命令显示 .so 文件的依赖项,则会给出以下输出
问题是,我在创建 SDKTestSuite.so 文件时包含了库文件 libsynthcam.so 和 libuusb.so 文件。以及为什么这些相机名称没有显示在 ldd 命令的输出中。
如何使 ldd 命令显示这些库文件?
c++ - 动态依赖 lib/tls 搜索路径
我有一个可执行文件,它依赖于两个基本的 boost 库,libboost_system
并且libboost_thread
,当可执行文件加载库时,搜索路径在以下方面令人费解地不同lib/tls
:
可执行文件已与-rpath=/opt/...
两个库的完全相同的设置链接,并且我知道 boost 是通过公共调用构建的b2
(即两者的命令行参数完全相同)。/etc/ld.so.cache
没有任何相关条目。
此外,就 rpath 或 ABI 要求而言,构建的库本身似乎没有什么特别之处,
这两个库具有完全相同的共享库依赖项,除了依赖的事实libboost_thread
,libboost_system
并且都需要 GLIBC_2.2.5。
我认为已决定以libboost_system
某种方式需要与NPTL glibc 链接,这<rpath>/lib/tls
就是搜索的原因,但对于我来说,查看libboost_system
库的 objdump 并不清楚为什么会这样。
如何标记 NPTL 库?dlopen(3) 如何决定查看 lib/tls 路径?
c++ - ld64.so 存在于 ldd 中,在运行时丢失
我正在编译一些代码,出于各种原因,我正在静态地执行它。在我的 Ubuntu 12.04 / gcc 4.6.3 机器上,它编译执行得很好,并且是完全静态的:
到目前为止,一切都很好。但我还需要在另一台机器上运行它,一个 Scientific Linux 5 系统,运行 gcc 4.5.3。出于某种原因,ldd 还剩下一些动态库:
这本身就很好。代码编译链接OK,从ldd可以看出,所有的依赖都解决了。但是,当我尝试在 SL 机器上执行它时,它失败了:
据我所知,在执行时由于某种原因/lib/ld64.so.1 => /lib64/ld-linux-x86-64.so.2
链接没有被解析,即使 ldd 做到了。当然,在我有 root 访问权限的机器上,我可以通过从 ld-linux-x84..blah 到 /lib/ld64.so.1 的符号链接来解决这个问题,但这是一个相当裤子的解决方案,我不能申请它到我们的集群。如果我动态编译整个东西,它工作正常,但这意味着在一堆我想避免的机器上安装我正在编译的所有第 3 方库。最后,我编译的所有依赖项也被另一个项目使用,也用cmake编译,在那种情况下我没有问题,ldd实际上直接列出了/lib64/ld-linux ...blah,而不是调用到 /lib/ld64.so。
那么 - 为什么会发生这种情况?为什么我可以编译和链接代码 OK,ldd it OK,但不能执行它?任何想法将不胜感激!
clang - ldd 的 clang 类似物是什么?
如何找出可执行文件所依赖的 DLL?
在具有 GNU 开发工具链 ( gcc
&c) 的系统上,我使用它ldd
,但是clang
系统呢,例如 Mac OS X(它没有ldd
)?
ldd - 如何查看完整的“ldd”路径详细信息,而不是“找不到文件”?
当路径不存在时运行 ldd 命令时,我得到“找不到文件”而不是路径。bash-3.2$ ldd curl libcurl.so.4 => /usr/local/lib/libcurl.so.4 libldap.so.5 => /usr/lib/libldap.so.5 librt.so.1 => / lib/librt.so.1 libssl.so.1.0.0 =>(未找到文件) libcrypto.so.1.0.0 =>(未找到文件)
有没有一个选项可以查看找不到哪个文件?完整路径?
mysql - FreeBSD 9.2 (x64) libmysqlclient.so.18
我在我的专用服务器上使用 FreeBSD 9.2 64 位,并且我有在 FreeBSD 32 位系统上编译的库。这个库使用 libmysqlclient.so.18,我有问题,因为我不知道如何在我的 64 位操作系统上安装 32 位版本而不删除我服务器上现有的 64 位 libmysqlclient.so.18。
LDD输出:
gcc - “干净”链接动态库(没有 LD_LIBRARY_PATH)?
标题几乎概括了它。我正在尝试在编译另一个动态库时链接一个动态库。这是我的(简短而谦虚的)makefile:
所以我首先构建 libsort.so。它工作得很好。然后我正在构建使用 libsort.so 的 libkdtree.so。编译也很顺利,但 libkdtree.so 无法使用:这是 libkdtree.so 的 ldd 输出:
如果我将目录添加到 LD_LIBRARY_PATH,它就可以工作,链接就在那里,我可以使用该库。LD_LIBRARY_PATH 真的要这样改变吗?我别无选择?我的意思是与其他人分享我的代码,我不想让人们去他们的 .bashrc 添加一些东西,以便他们可以运行我的代码。我想我不明白 -L 做了什么,因为我认为它会手动链接库。
有人可以给我我忽略的魔术方法,还是粉碎我干净链接的梦想?
谢谢 !
c++ - ldd 输出静态链接在共享库上
我正在尝试创建一个共享库 libddv3djava.so
我为 libddv3djava.so 编译源代码,如下所示:
创建 libddv3djava.so:
当我在 libddv3djava.so 上执行 ldd 时:
问题:
它说 libddv3djava.so 是静态链接的。我用-shared创建了 libddv3djava.so,所以这让我很困惑。
问题:
当 libddv3djava.so 没有静态链接时,为什么ldd输出静态链接?
附加信息:
我不确定以下是否有任何相关性,但可能是;libddv3djava.so 依赖于我创建的另一个共享库 libddv3d.so。基本上 libddv3djava.so 是一个围绕 libddv3d.so 的 JNI 包装器。发帖来源:
com_ddv3d_Ddv3dBinding.h:
com_ddv3d_Ddv3dBinding.cpp:
file - 创建静态二进制文件
我想在模拟器上运行动态链接的可执行文件。但是模拟器只支持静态链接的可执行文件。因此,我使用 ELF statifier 将动态链接的可执行文件转换为静态链接的可执行文件。当我在其上使用文件命令时,输出表明它是动态链接的 ELF 32 位 LSB 可执行文件,英特尔 80386,版本 1 (SYSV),动态链接,适用于 GNU/Linux 2.6.24,BuildID[sha1]=0xff353323798f9b709345f32b699cc73835dabc53,没有剥离,但我在其上使用 ldd,输出状态“不是动态可执行文件”可能是什么原因?有没有其他方法可以将动态链接的可执行文件转换为静态链接的可执行文件?
c++ - 用于快速确定哪些源代码导致不必要的 .so 链接的脚本
上下文:我有一个通过网络传输可执行文件的程序。这个可执行文件太大了,所以我ldd -u bigFoo.so
在其关联的共享对象上运行。这表明我有大量未使用的共享对象文件占用了一个演出。
问题:给定一段 C++ 源代码foo.cc
,它被编译并链接到bigFoo.so
中,并且unused.so
(由 显示ldd -u
)链接到bigFoo.so
中,是否有脚本或 shell 命令序列可以快速确定foo.cc
导致链接中的调用unused.so
?