首页 > 系统相关 >window和linux下有关xxx.dll和xxx.so动态库,可执行文件运行时的动态库检索路径文档

window和linux下有关xxx.dll和xxx.so动态库,可执行文件运行时的动态库检索路径文档

时间:2023-09-21 21:45:17浏览次数:52  
标签:选项 路径 共享 rpath xxx dll DT 动态 链接

没想到详细的内容都在库和命令的man手册中。


ld.so动态库手册里有描述ELF可执行文件在运行时,都会在哪几个位置检索动态库。

如果共享对象依赖项不包含斜杠,则它 按以下顺序搜索:

(1) 使用二进制文件的 DT_RPATH 动态节属性中指定的目录(如果存在且 DT_RUNPATH 属性不存在)。 不推荐使用 DT_RPATH。

(2) 使用环境变量 LD_LIBRARY_PATH,除非可执行文件正在安全执行模式下运行(见下文),在这种情况下该变量将被忽略。

(3) 使用二进制文件的 DT_RUNPATH 动态节属性中指定的目录(如果存在)。 搜索此类目录只是为了查找 DT_NEEDED(直接依赖项)条目所需的那些对象,并且不适用于这些对象的子对象,这些对象本身必须有自己的 DT_RUNPATH 条目。 这与 DT_RPATH 不同,DT_RPATH 用于搜索依赖树中的所有子项。

(4) 来自缓存文件/etc/ld.so.cache,其中包含先前在增强库路径中找到的候选共享对象的已编译列表。 但是,如果二进制文件是使用 -z nodeflib 链接器选项链接的,则将跳过默认路径中的共享对象。 安装在硬件功能目录(见下文)中的共享对象优先于其他共享对象。

(5) 在默认路径/lib 中,然后在/usr/lib 中。 (在某些 64 位体系结构上,64 位共享对象的默认路径是 /lib64,然后是 /usr/lib64。)如果二进制文件是使用 -z nodeflib 链接器选项链接的,则将跳过此步骤。


ld命令手册,描述-rpath将目录添加到运行时库搜索路径。

将目录添加到运行时库搜索路径。 当将 ELF 可执行文件与共享对象链接时使用。 所有 -rpath 参数都连接起来并传递给运行时链接器,后者使用它们在运行时定位共享对象。
当定位链接中显式包含的共享对象所需的共享对象时,也会使用 -rpath 选项; 请参阅 -rpath-link 选项的说明。
仅使用 --with-sysroot 选项配置的本机链接器和交叉链接器支持以这种方式搜索 -rpath。
如果在链接 ELF 可执行文件时未使用 -rpath,则将使用环境变量“LD_RUN_PATH”的内容(如果已定义)。 -rpath 选项也可用于 SunOS。
默认情况下,在 SunOS 上,链接器将从给定的所有 -L 选项中形成运行时搜索路径。 如果使用 -rpath 选项,则将仅使用 -rpath 选项形成运行时搜索路径,而忽略 -L 选项。
这在使用 gcc 时很有用,它添加了许多可能位于 NFS 安装的文件系统上的 -L 选项。
为了与其他 ELF 链接器兼容,如果 -R 选项后跟目录名而不是文件名,则将其视为 -rpath 选项。


window下dll动态库的搜索路径


readelf命令可显示有关 ELF 文件的信息

标签:选项,路径,共享,rpath,xxx,dll,DT,动态,链接
From: https://www.cnblogs.com/XingXiaoMeng/p/17721031.html

相关文章

  • Cygwin 编译的动态库文件.dll.a
    前提Cygwin编译OpenSSL出来的有两种文件:libcrypto.a和libcrypto.dll.a,VS编译调用没有问题,运行卡住,暂时未解决测试代码#include<openssl/evp.h>intmain(intargc,char*argv[]){ EVP_MD_CTX*mdctx; mdctx=EVP_MD_CTX_new(); EVP_MD_CTX_init(mdctx); EVP_DigestInit(m......
  • selenium自动化测试-获取动态页面小说
    有的网站页面是动态加载的资源,使用bs4库只能获取静态页面内容,无法获取动态页面内容,通过selenium自动化测试工具可以获取动态页面内容。参考之前的"bs4库爬取小说工具"文章代码,稍微修改下,就可以转成获取动态页面小说工具。第一步:先确定目标网址先找到小说目录页面。网址首页:'ht......
  • Win32编程之通过SetWindowsHookEx注入DLL(十六)
    一、SetWindowsHookEx函数SetWindowsHookEx是用于在Windows操作系统中设置全局或本地的钩子(hook)。钩子是一种用于监视并拦截特定事件或消息的机制,通常用于拦截和处理键盘输入、鼠标操作、窗口消息等。SetWindowsHookEx允许你安装一个全局或本地的钩子过程,以便在事件发生时执行......
  • win10操作系统动态链接库DLL文件搜索路径
    搜索可执行文件(xx.exe)同级目录下的其它DLL文件(不会搜索子文件夹)32位程序C:\Windows\System32操作系统当前用户或者系统用户Path环境变量中直接包含的文件夹(子文件夹中的DLL同样无法被搜索到,不是递归搜索)在终端执行D:\code>C:\Users\XXX\Desktop\新建文件夹\bb.......
  • Win32编程之函数转发注入DLL(十五)
    一、创建目标DLL文件DLL名称:targetdll.dll头文件(targetdll.h):#pragmaonce__declspec(dllexport)void__stdcallhello();__declspec(dllexport)int__stdcalladd(inta,intb);源文件(targetdll.cpp)#include<stdio.h>#include"targetdll.h"void_......
  • 动态规划——悬线法
    动态规划——悬线法P4147玉蟾宫1//动态规划——悬线法2#include<iostream>3#include<cmath>4usingnamespacestd;5constintN=1010;6intn,m;7chara[N][N];8inth[N][N];//保存高度9intl[N][N],r[N][N];10intmain(){11cin>>n>>m;......
  • 6.3 应用动态内存补丁
    动态内存补丁可以理解为在程序运行时动态地修改程序的内存,在某些时候某些应用程序会带壳运行,而此类程序的机器码只有在内存中被展开时才可以被修改,而想要修改此类应用程序动态补丁将是一个不错的选择,动态补丁的原理是通过CreateProcess函数传递CREATE_SUSPENDED将程序运行起来并暂......
  • Vue动态组件、插槽、vue项目
    一、动态组件1、动态组件#<component:is="who"></component>#component标签的is属性等于组件名字,这里就会显示这个组件<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Title</title>......
  • mybatis实现多字段动态排序
    背景在复杂项目中,可能会对数据表多个字段进行排序,不理解的话可结合需求看。需求现在有一张User表男同学先按age降序排序,后按height降序排序,最后按id升序排序女同学先按age升序排序,后按weight降序排序,最后按id升序排序不合理?现实可能就是这么的不合理。实现排序对(字段......
  • 动态组件
    动态组件component标签的is属性等于组件名字,这里就会显示这个组件组件切换方法一:<body><divid="app"><button@click="who='home'">首页</button><button@click="who='shopping'">购物界面</button><bu......