如何设置 DT_RPATH 或 DT_RUNPATH?

2023-11-24

在 Linux 上,ld.so(8)手册页讨论了动态库的搜索顺序。它说DT_RPATH已被弃用,并且还提到DT_RUNPATH。没有提到-rpath链接器选项。

The ld(1)手册页提到了-rpath and -rpath-link选项,但从未提及DT_RPATH or DT_RUNPATH除了描述图书馆搜索顺序,这当然与中给出的信息不匹配ld.so(8).

最后有一个LD_RUN_PATH环境变量。ld(1)说它使用如果-rpath and -rpath-link选项未设置,但ld.so(8)没有提到它。

我的直觉是-rpath实际上设置DT_RPATH, and -rpath-link sets DT_RUNPATH,但我找不到任何地方证实这一点。我一直用-rpath;如果它是相同的DT_RPATH我不应该使用它,但是我在动态链接上找到的操作方法文章说要使用它,所以我不确定它是否相同。

有人可以澄清一下如何DT_RPATH and DT_RUNPATH已设置,以及它们是否相同-rpath and -rpath-link?


当你是编译一个程序,您创建目标文件,然后link他们在一起。你可以使用GNU ld(1)来链接它们,还有其他链接器,LLVM链接器。链接器将目标文件组合成可执行文件。 GNU ld(1) 是 binutils 的一部分此处提供文档.

当你execute一个已经编译好的可执行文件,然后动态链接器 ld.so(8) 在系统上找到该可执行文件所依赖的库,加载它们并执行该可执行文件。 ld.so(8) 是一个共享库,通常作为 C 标准库的一部分分发,通常在 Linux 上是 glibc,但也有其他库,例如 musl。

我认为这两个程序都被命名为“链接器”,这很令人困惑。一种是“编译链接器”,另一种是“可执行链接器”。

如何设置 DT_RPATH 或 DT_RUNPATH?

编辑 elf 文件以包含特定部分。

当使用 GNU ld 创建 elf 文件时,现在您可以使用以下命令设置 RUNPATH 部分-rpath=something。您可以设置RPATH部分与--disable-new-dtags -rpath=something。 RPATH 已被弃用,所以通常-rpath设置运行路径。https://www.javaer101.com/en/article/1127068.html*这不会在我的系统上检查,我必须使用gcc -Wl,--enable-new-dtags -Wl,-rpath=/tmp设置运行路径...

您还可以在编译后在任何 ELF 文件中设置部分。看我可以更改已编译的二进制文件中的“rpath”吗?

它们是否与-rpath和-rpath-link相同?

From ld文档:

-rpath 和 -rpath-link 之间的区别在于 -rpath 选项指定的目录包含在可执行文件中并在运行时使用,而 -rpath-link 选项仅在链接时有效。

该文档还解释了如何-rpath-link作品。就是指定搜索依赖共享库的目录。

最后还有一个LD_RUN_PATH环境变量

When 编译可执行的 GNU ld(1) 也会在此变量指定的目录中搜索库。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何设置 DT_RPATH 或 DT_RUNPATH? 的相关文章

  • Fortran 中的共享库,最小示例不起作用

    我试图了解如何在 Linux 下的 Fortran 中动态创建和链接共享库 我有两个文件 第一个 liblol f90 看起来像这样 subroutine func print lol end subroutine func 我用它编译gf
  • 如何在gnuplot中将字符串转换为数字

    有没有办法将表示数字 以科学格式 的字符串转换为 gnuplot 中的数字 IE stringnumber 1 0e0 number myconvert stringnumber plot 1 1 number 我可能使用 shell 命令
  • 如何从 Linux 内核模块获取使用计数?

    我对正在开发的内核模块的使用计数有疑问 我想打印它以进行调试 如何从模块代码中获取它 有问题的内核版本 Linux 2 6 32 module refcount http lxr linux no linux v2 6 34 1 inclu
  • 使用 Gradle 在多个 Android 应用程序之间共享 Android 库

    我有 Android 应用程序 A 和 B 我想将每个应用程序中的重复代码提取到共享库 L 中 如何使用 Gradle 执行此操作 我之前见过这个问题的一些排列 但答案很少 最接近 最好的已问问题是这个 多个 Android 应用程序依赖于
  • 如何从远程 ssh 连接上运行的 tmux(复制模式)复制到本地剪贴板

    我通过 OS X 上的 VirtualBox 运行 Linux 我通过在无头状态下运行虚拟机 然后使用端口转发 sshing 到 Linux 机器来实现这一点 现在 无论复制到我的虚拟机上的剪贴板 我都可以粘贴到我的远程 ssh 会话上 但
  • 在 debian wheezy amd64 上安装 ia32-libs

    我正在使用 Debian 7 喘息 amd64 uname a Linux tzwm debian 3 2 0 4 amd64 1 SMP Debian 3 2 51 1 x86 64 GNU Linux 我想安装ia32 libs在我的
  • 用于读取文件的 Bash 脚本

    不知道为什么最后一行没有从脚本中删除 bin bash FILENAME 1 while read line do cut d f2 echo line done lt FILENAME cat file 1 test 2 test 3 t
  • 使用 ProcessBuilder 运行 shell 脚本

    我正在尝试使用 Java 和 ProcessBuilder 运行脚本 当我尝试运行时 我收到以下消息 error 2 没有这样的文件或目录 我不知道我做错了什么 但这是我的代码 ps 我尝试只执行不带参数的脚本 错误是相同的 String
  • Python将文件从Linux复制到WIndows

    我正在构建一个网站 该网站有一个表单 可以捕获用户数据并在用户数据上运行一些cgi cgi 的第一步是需要将文件从 Linux Web 服务器复制到 Windows 计算机 服务器将使用 Active Directory 角色帐户作为复制凭
  • 使用c在linux上分块读写

    我有一个 ASCII 文件 其中每一行都包含一个可变长度的记录 例如 Record 1 15 characters Record 2 200 characters Record 3 500 characters Record n X cha
  • 如何列出 nginx 中的所有虚拟主机

    有没有一个命令可以列出 CentOS 上 nginx 下运行的所有虚拟主机或服务器 我想将结果通过管道传输到文本文件以用于报告目的 我正在寻找与我用于 Apache 的命令类似的命令 apachectl S 2 gt 1 grep 端口 8
  • 为什么默认情况下不启用 arp 忽略/通告 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我有一个需要经验才能回答的具体问题 为什么 arp ignore arp announce 在 Linux 安装 例如 debian 上默认不启用 有
  • 运行 shell 命令并将输出发送到文件?

    我需要能够通过 php 脚本修改我的 openvpn 身份验证文件 我已将我的 http 用户设置为免通 sudoer 因为这台机器仅在我的家庭网络中可用 我目前有以下命令 echo shell exec sudo echo usernam
  • 如何使用 go1.6.2 构建 linux 32 位

    有没有任何组合GOARCH and GOOS我可以设置哪些值来构建 ELF 32 位二进制文 件 GOOS linux and GOARCH 386 更多示例 架构 32 bit gt GOARCH 386 64 bit gt GOARCH
  • 在嵌入式系统上将内核控制台发送到哪里?

    我正在开发一个嵌入式系统 该系统当前通过串行端口 1 上的控制台输出启动 Linux 使用启动加载程序中的控制台启动参数 然而 最终我们将使用这个串行端口 内核控制台输出的最佳解决方案是什么 dev null 能否以某种方式将其放在 pty
  • Apache LOG:子进程 pid xxxx 退出信号分段错误 (11)

    Apache PHP Mysql Linux 注意 子进程 pid 23145 退出信号分段错误 11 tmp 中可能存在 coredump 但 tmp下没有找到任何东西 我怎样才能找到错误 PHP 代码中函数的无限循环导致了此错误
  • 如何回忆上一个 bash 命令的参数?

    Bash 有没有办法回忆上一个命令的参数 我通常这样做vi file c其次是gcc file c Bash 有没有办法回忆上一个命令的参数 您可以使用 or 调用上一个命令的最后一个参数 Also Alt can be used to r
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 如何指定配置脚本的包含目录

    我的工作场所有一个 Linux 系统 其中包含相当旧的软件包 并且没有 root 访问权限 我正在从源代码编译我需要的包 prefix somewhere in homedir 我的问题是我只是不知道如何说服配置在特定目录中查找头文件 源码
  • 如何使用 nohup 获取正在运行的程序列表

    我正在通过 SSH 连接访问运行 CentOS linux 发行版 的服务器 由于我无法始终保持登录状态 因此我使用 nohup command 来运行我的程序 我找不到如何获取我开始使用 nohup 的所有程序的列表 工作 只有在我注销之

随机推荐

  • 使用 ggsignif 与分组条形图和facet_wrap 不起作用

    我正在尝试使用ggsignif用于使用facet wrap在成对条形图的顶部显示重要的星星 然而 我无法找到一种方法来显示每个方面一个重要的条形 我的意思是 dat lt data frame Group c S1 S1 S2 S2 Sub
  • 在 Hadoop Streaming 中生成单独的输出文件

    仅使用映射器 Python 脚本 而不使用化简器 如何为每一行输出输出一个以键作为文件名的单独文件 而不是输出长文件 输入和输出格式类可以通过使用 inputformat 和 outputformat 命令行参数来替换 如何执行此操作的一个
  • 如何读取 .obj 文件?

    在 Visual Studio 中 编译 C 文件后会生成目标文件 obj 如何阅读和理解它 还有如何在 Visual studio 2015 中查看编译器优化后的代码 如果已回答 请重定向 Use the DUMPBINVisual St
  • 为什么使用除 VARCHAR2(4000) 以外的其他方法在 Oracle 数据库中存储字符串?

    I found 询问汤姆文章解释一下Oracle中CHAR和VARCHAR2没有太大区别 它给人的印象是 我应该对要存储字符串的每一列使用 VARCHAR2 4000 BYTE 即使对于 ISO 639 1 语言代码也是如此 因为它没有任何
  • 用 ruby​​ 发送 POST ?

    有什么好的库可以在 ruby 中发送 POST 标头吗 你可以做这样的事情 require net http postData Net HTTP post form URI parse http thewebsite net postKey
  • malloc 和 HeapAlloc 之间有根本区别吗(除了可移植性之外)? [复制]

    这个问题在这里已经有答案了 由于各种原因 我正在尝试将代码从 C 运行时移植到使用 Windows 堆 API 的代码 我遇到了一个问题 如果我重定向malloc calloc realloc free打电话给HeapAlloc HeapR
  • Nougat 上的 android.os.TransactionTooLargeException

    我将 Nexus 5X 更新为 Android N 现在当我在其上安装应用程序 调试或发布 时 我会在每个包含附加捆绑包的屏幕转换上收到 TransactionTooLargeException 该应用程序适用于所有其他设备 PlaySto
  • Android调用onClick方法而不点击

    我想使用现有的 onClick 方法来使我的程序更简单 它由 onClick 方法和其他方法组成 Override public void onClick View v switch v getId case R id button1 br
  • 要在 Scala 中映射的案例类

    有没有好的方法可以转换 Scalacase class实例 例如 case class MyClass param1 String param2 String val x MyClass hello world 成某种映射 例如 getCC
  • 无法将 null 分配给隐式类型变量

    根据 Visual Studio 的说法 这是不行的 var foo null 但这没关系 var foo false double null null 为什么 是个 double null也影响到null在 else 分支中 隐式类型变量
  • x86-64 REX 前缀中的“REX”代表什么?

    From 英特尔的SDM 第 2 2 1 节指定 REX 前缀用于 指定 GPR 和 SSE 寄存器 指定 64 位操作数大小 指定扩展控制寄存器 但缩写词中的字母 REX 代表什么 这个2002年热门薯条演示AMD 扩展了幻灯片 10 上
  • Structuremap 是否支持开箱即用的 Lazy?

    结构图是否允许您以惰性方式进行构造函数注入 意思是在使用之前不创建注入的对象 UPDATE StructureMap v3 开箱即用地实现了这一点 因此不再需要这个技巧 StructureMap 版本 2 没有 但通过一些技巧 您可以让它完
  • Square 和 Rectangle 继承有什么问题?

    我读过一些关于将 Square 作为 Rectangle 类的继承类是一种不好的做法的文章 说它违反了 LSP 里氏替换原则 我还是不明白 我用Ruby做了一个示例代码 class Rectangle attr accessor width
  • Delphi 自动 Format Source 损坏匿名程序

    昨天我发现了 Delphi 中的 Format Source 功能 它节省了我很多时间 然而 我发现它破坏了匿名过程的布局 有没有什么设置可以改善这个结果 例如 如果我有以下代码 procedure TServerThread cbUpda
  • C/C++ 中的 asc 和 chr 等效项

    好吧 标题几乎概括了这一点 我想在 C 中使用类似 asc 0 的东西 并且想让程序平台独立 所以不想使用 48 任何帮助表示赞赏 您可以简单地使用单引号来使字符常量 char c a 字符类型is数字类型 所以没有真正的需要asc and
  • 在一个套接字上订阅多个多播组(Linux、C)

    是否可以在单个套接字上从多个多播组接收数据 例如 void AddGroup int sock const char mc addr str int mc port const char interface struct sockaddr
  • Ninject 使用 WCF Web API Preview 5

    有人能为我指出正确的方向 让 Ninject 与 WCF Web API Preview 5 一起使用吗 我已在我的 ASP NET MVC 3 项目以及使用 Ninject Extensions Wcf 库的另一个内部 WCF 服务中成功
  • 如何在 IE 中使用 javascript 从客户端获取文件大小?

    我使用了以下方法 HTML
  • Android,Glide 显示错误图像约一秒

    我正在使用 Glide 库从 URL 加载图像 这是我从 Graph Request Facebook 获得的 它用在 RecyclerAdapter 中 当我滚动时 每个 ImageView 显示错误的图片大约不到一秒 然后纠正一张 这是
  • 如何设置 DT_RPATH 或 DT_RUNPATH?

    在 Linux 上 ld so 8 手册页讨论了动态库的搜索顺序 它说DT RPATH已被弃用 并且还提到DT RUNPATH 没有提到 rpath链接器选项 The ld 1 手册页提到了 rpath and rpath link选项 但