当前位置: 首页 > news >正文

Linux下加载可执行文件所在目录下的so的方法

Linux下默认并不会像Windows那样加载可执行文件所在目录下的so,但是其实是提供了这个功能的,可以通过以下几种方式开启这个功能

1、ld链接时使用-rpath '$ORIGIN',gcc/g++链接时使用-Wl,-rpath,'$ORIGIN':

gcc -o myprogram myprogram.c -L. -lexample -Wl,-rpath,'$ORIGIN'

如果需要放在特定目录(比如bin下的可执行文件要加载lib下的so):

gcc -o myprogram myprogram.c -L. -lexample -Wl,-rpath,'$ORIGIN/../lib'

修改既有可执行文件(patchelf为第三方工具):

patchelf --set-rpath '$ORIGIN' myprogram

要注意这种方法只能作用于当前可执行文件搜索依赖的so,不能用于下一级的so搜索依赖的so

2、使用shell脚本加载器,并使用LD_LIBRARY_PATH环境变量指定搜索路径:

LD_LIBRARY_PATH='$ORIGIN' ./myprogram

或者:

export LD_LIBRARY_PATH='$ORIGIN'
./myprogram

要注意这种方法将作用于所有读到该环境变量的程序以及子级的so搜索依赖的so,特别是可能会影响子进程

3、使用shell脚本加载器,并使用ld.so的--library-path指定搜索路径

/lib64/ld-linux-x86-64.so.2 --library-path '$ORIGIN' ./program

要注意这种方法将作用于该程序以及子级so的搜索依赖的so,但不会影响子进程

这个方法的另一个好处就是可以将ld.so也集成进软件包中

http://www.dtcms.com/a/145504.html

相关文章:

  • rk3568build-linux.sh解析
  • 项目二 - 任务7:统计一组学生成绩
  • 【计量地理学】实验七 多种地统计方法的插值比较
  • Cribl 对Windows-xml log 进行 -Serialize-05
  • 王博:影视领域的多元创作先锋,以卓越才华开启新篇章
  • 如何编写JavaScript插件
  • MySQL-锁机制3-意向共享锁与意向排它锁、死锁
  • 从入门到精通汇编语言 第六章(中断及外部设备操作)
  • ONLYOFFICE深度解锁系列.3-OnlyOffice集成第三方软件原理揭秘:如何提高文件打开速度
  • 器件(七)—MOS管选型及驱动电路设计
  • 动态规划入门:背包问题求具体方案(以0-1背包问题为例)
  • 免费图片软件,可矫正倾斜、调整去底效果
  • 【二叉树专题】一道深入浅出的 DFS 题:求二叉树的直径(含通俗易懂讲解)
  • 精准分割 - 深入解析 Kubernetes 中的 NVIDIA Multi-Instance GPU (MIG)
  • JavaScript 笔记 --- part 4 --- Web API (part 2)
  • 自定义请求头导致跨域的解决办法
  • AI日报 - 2025年04月20日
  • 每天学一个 Linux 命令(26):less
  • 从入门到精通汇编语言 第五章(流程转移与子程序)
  • 源道-做股票应该从传统的技术图形转向行业规律思考
  • C++(23)—模板初阶
  • java面试篇(常见的集合底层原理)
  • AI大模型之模型幻觉
  • Redis——通信协议
  • 【大模型】单选数据集制作举例
  • Java技术栈 —— 网络带宽受限,图片预览加速
  • 5.4.1 Password控件的Password属性绑定问题
  • 06 GE Modifier
  • 【AI论文】对人工智能生成文本的稳健和细粒度检测
  • 性价比超高的 英伟达Tesla T4卡 如何解决散热问题?