我在哪里可以找到 arm-linux-gnueabihf-ld 的联机帮助页,更不用说包含 -rpath 和 -rpath-link 的编写良好的联机帮助页了?

Posted

技术标签:

【中文标题】我在哪里可以找到 arm-linux-gnueabihf-ld 的联机帮助页,更不用说包含 -rpath 和 -rpath-link 的编写良好的联机帮助页了?【英文标题】:Where can I find a manpage for arm-linux-gnueabihf-ld, let alone a well-written one, that includes -rpath and -rpath-link? 【发布时间】:2016-05-27 15:19:00 【问题描述】:

我在我的 ELF 文件上运行了 arm-linux-gnueabihf-ldd(一个来自 Cygwin——别问——一个来自 Ubuntu),尽管通过包含 -rpath- 消除了 Ubuntu 上的警告链接,我认为是动态依赖静态,考虑到我阅读它的难以捉摸的联机帮助页的模糊性,dll 仍然显示 ld-linux.so.3 作为 5 个未解决的之一,但链接器从未抱怨其他四个!在这种情况下,路径是指向通过 apt-get 安装的本地副本。

这种浪费时间导致主机抱怨“未找到”(这意味着,正如我后来发现的那样,找到了 ELF 文件,但没有找到未命名的库)。主机在 /lib 中具有大部分这些而在 /usr/lib 中具有其余部分的事实使我认为 -rpath 和/或 -rpath-link 应该告诉它在主机上的何处查找它们的分辨率,好像主机不够聪明,不知道它把库放在哪里。

我不是在寻找任何比简单的 arm-linux-gnueabihf-ld 选项(或扩展为 arm-linux-gnueabihf-g++ 选项)足够清晰的“更高级别”(即更不透明)的东西在他们的使用中,并且不会引起如下消息:

arm-linux-gnueabihf-g++: error: unrecognized command line option ‘-rpath’
arm-linux-gnueabihf-g++: error: unrecognized command line option ‘-rpath’

当我知道它在不同的上下文中识别“-rpath”时,它抱怨它在构建机器上找不到对主机无用的路径!

【问题讨论】:

您的意思是ld 还是ldd ldd 是用于查找需要动态库的未解析外部的实用程序。 我知道这一点,但您在标题中写了一个,而在问题的正文中使用了另一个。 【参考方案1】:

你试过man ld吗?

完整的文档在binutils manual,您可以使用info ld阅读。

-rpath-link,我认为它使动态依赖成为静态

不,它告诉链接器在哪里找到间接共享库依赖项,因此它可以检查它们以确保没有未解析的引用。

。主机在 /lib 中具有大部分这些而在 /usr/lib 中具有其余部分的事实使我认为 -rpath 和/或 -rpath-link 应该告诉它在主机上的何处查找它们的分辨率

没有。

-rpath 添加可执行文件的路径,以便在运行时动态加载器将在该路径中查找共享库依赖项在运行时。这是指定共享库路径的一种方法,长为ldconfigLD_LIBRARY_PATH 等(详见ld.so(8))。

-rpath-link 告诉链接器在链接时在哪里查找共享库依赖项,但不影响在运行时如何找到依赖项。

您不能将-rpath 传递给g++,因为它是链接器的一个选项,而g++ 不理解它。使用-Wl,-rpath 告诉g++ 将其传递给链接器。

【讨论】:

即使使用 -Wl,"-rpath /lib" -Wl,"-rpath /usr/lib" 它仍然会抱怨,但是应该使用等效的 -Wl,"-R /lib" -Wl ,"-R /usr/lib" (它也接受没有 -Wl,)它没有。它只是构建了一个同样无用的 ELF,缺少通往动态库的路径,与以往一样。 投诉如下:/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin /ld: bad -rpath option collect2: error: ld returned 1 exit status 由于在解析静态链接时缺少前瞻逻辑,问题是否与位置相关? 原来问题出在 arm-linux-gnueabihf-ldd 的输出(我是从 Cygwin 运行的,因为 Ubuntu 安装不包含它,也无法通过 apt 找到它) -file),我至少通读了 3 遍,显示找不到 ld-linux-armhf.so.3,我终于意识到这不是 ld-linux.so.3,所以我创建了一个软链接,现在获取 /lib/libc.so.6:未找到版本“GLIBC_2.15”。最后一条消息至少告诉了我一些有用的东西! 你做错了。使用这些选项的正确方法是-Wl,-rpath,/lib,即在引号内使用逗号而不是空格。或-Wl,rpath -Wl,/lib(阅读man gcc)。它抱怨-Wl,"-rpath /lib",因为-rpath /lib 不是ld 的有效选项(它必须是两个选项)。带有"-R /lib" 的版本创建了一个`/lib` 的rpath,即带有一个前导空格,它永远不会匹配任何东西。但是您不需要为 /usr/lib 设置 rpath,因为无论如何 ld.so 总是在那个位置查找。

以上是关于我在哪里可以找到 arm-linux-gnueabihf-ld 的联机帮助页,更不用说包含 -rpath 和 -rpath-link 的编写良好的联机帮助页了?的主要内容,如果未能解决你的问题,请参考以下文章

我在哪里可以找到 CommandTarget?

我在哪里可以找到“通过 Facebook 支付”API? [关闭]

我在哪里可以找到免费的天气图标? [关闭]

我在哪里可以找到模式的数据目标

我在哪里可以找到 XAMPP 中的 MySQL 日志文件

缺少 CustomImageLabelerOptions。我在哪里可以找到它?