问题标签 [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 - 如何确定为什么动态库链接到应用程序?
我有一个我正在从源代码构建的 linux 应用程序。当我对二进制文件运行 ldd 时,我了解大多数库......但不是全部。
有没有办法将标志添加到 ld 或 gcc/g++ 或我能做的任何事情来确定链接器选择链接特定库的原因?
编辑:
为了探索@shloim 设置的路线,我尝试了以下方法:
是否有明显的原因nm
不能在 libcrypto 上工作?
linux - 根据 $LD_LIBRARY_PATH 和架构选择库
为了演示,我用 2 个版本的 libgcc_s.so.1 制作了 2 个文件夹,我根据 ldd 寻找库选择:
为什么 MyProgram 不使用 A/libgcc_s.so.1 ?我知道这是一个架构问题,但是 A/libgcc_s.so.1 如何被认为是无效的,我该如何手动测试它?
qt - QPluginLoader:自定义插件(带有依赖项)无法在 Qt 中加载
我正在使用 QPluginLoader 构建一个 QT 应用程序,使用 Qt 插件框架。
我已经构建了一个插件,但框架无法加载插件。我的插件依赖于第三方 shlib (log4qt)。
该文件已正确识别,但加载文件失败(这立即让我怀疑缺少依赖项)。
我在 shlib 上运行 ldd,在输出中,这是唯一丢失的文件:
liblog4qt.so.1 => 未找到
我尝试了以下方法来解决问题:
- 使用 QApplication::addtLibraryPath("liblog4qt.*)
- 编辑 /etc/ld.conf 以手动添加库位置和刷新缓存
- 将所有 liblog4qt* 文件复制到我的插件目录中
以上所有这些都与巧克力防火板一样有用。
这是我加载插件的方式。这里没有什么不寻常的......
这是控制台输出的(相关部分):
有谁知道为什么我的插件库没有被加载?
[[附加信息]]
- 操作系统:Ubuntu 12.0.4 LTS
- 海湾合作委员会:4.6.3
- QT:4.8.1
- QT 创建者:2.4.1
c++ - 有没有办法将相对库路径添加到可执行文件以避免设置 LD_LIBRARY_PATH
我正在构建一个链接一些共享库的程序。它们包含在相对于我的项目的 lib/ 目录中。
我遇到的问题是我希望可执行文件知道在相对 ../lib 目录中搜索库。这可能吗?
我真的不想更改 ld_library_path 或将文件移动到根拥有的标准路径之一。
当 .so 文件位于 strace/ldd 显示的标准路径之一上时,我能够编译可执行文件并运行它
gcc - gcc 构建链接,但共享库未与 ldd 一起出现
我有一个必须构建的程序。该程序依赖于libA
,并且libA
依赖于libB
. 两个库都在同一个文件夹中,但ldd libA.so
不包含libB.so
,所以我必须在链接时添加它。
这是我的gcc
命令:
gcc -L/path/to/libraries/lib -lA -lB -I/path/to/libraries/include main.cpp
该程序构建和链接,但它没有启动。它给了我以下错误:
./a.out:符号查找错误:/path/to/libraries/lib/libA.so:未定义符号:symbol_used_in_libA_but_defined_in_libB
ldd
我可以看到它libB.so
不包含在我的二进制文件中:
我有这些条件:
/path/to/libraries
在里面LD_LIBRARY_PATH
- 运行
ldconfig
没问题,ldconfig -p
找到libA.so
两者libB.so
- 如果在 gcc 命令中更改
-lB
它-lBB
会给我一个链接器错误,所以我认为即使它没有将它链接到可执行文件中,也gcc
可以正确找到。libB.so
我做错了什么?为了将可执行文件链接到两个库,我能做些什么?
linux - 理解 ldd 输出 - 符号链接
通常共享库有两个符号链接:
我将一个共享库链接到我的程序,该库也有两个符号链接:
当我跑步时,ldd myprogram
我得到:
这是什么意思 ?为什么 ldd 显示第二个符号链接?当我运行时,grep assimp /proc/myprogrampid/maps
我得到libassimp.so.3.1.1
指示库已加载的路径,但我不理解 ldd 输出的形式。
c - gcc 链接器产生意外的所以(clang 很好)
程序与 clang 正确链接,但与 gcc 不正确链接:
GCC 给出了不同的结果(当然,会导致共享库损坏)。
- gcc 版本 4.9.1 (Ubuntu 4.9.1-16ubuntu6)
- Ubuntu clang 版本 3.5.0-4ubuntu2 (tags/RELEASE_350/final) (基于 LLVM 3.5.0)
链接器选项是相同的。这里发生了什么?
完整来源在这里。
x86 - 查找共享库时“ldd”报告“未找到”
我有两个共享库,“engine.so”和“cengine.so”。'cengine.so' 对 'engine.so' 有依赖关系,这由 'ldd' 命令确认:
http://puu.sh/gj0ZU/f4530c3c28.jpg
但是它指出它找不到库,即使它们都在同一个目录中!我是否必须以某种方式手动指定查找目录?
此外,还依赖于“ld-linux-x86-x64.so.2”。我已经将程序构建为 32 位应用程序(没有 -m64 参数),为什么它会自动链接到 64 位(我假设?)库?
bash - 在每个链接库上获取 md5sum
我遇到了一个问题,程序突然不想启动,没有错误,没有任何东西。为了确保代码及其链接库的完整性,我想比较每个(动态)链接库的 md5sum。从这个论坛的其他帖子中,我发现列出所有链接库很容易显示它们:
如何添加 md5sum 或 sha1sum 以便在文件名旁边添加一个带有校验和的列?简单地添加 md5sum 只会产生一行,并且似乎没有完成这项工作:
产量
将 md5sum 排除在外会产生不错的链接库列表:
非常感谢任何提示!
linux - 修改可执行文件的链接路径
该ldd
实用程序显示二进制可执行文件所依赖的共享对象文件,还显示该二进制可执行文件在文件系统上的路径。
是否可以在现有的可执行文件上修改此路径?例如,假设我有一个二进制“foo.so”,我说:
如果我将此.so
文件部署到没有指定路径的机器上lbssl.so.0.9.8
,我当然会在使用foo.so
. 那么,是否可以修改现有可执行文件上的链接路径?
我意识到另一个解决方案是确保现有的链接路径指向一个有效的目标文件,实际上将目标文件复制到ldd
显示的路径。但是,假设我遇到了一种不可行的情况。是否可以修改现有可执行文件上的链接路径?