首页 > 其他分享 >解决找不到RUNPATH下的库的问题

解决找不到RUNPATH下的库的问题

时间:2024-07-15 17:30:06浏览次数:12  
标签:opt CacheLib lib admin RUNPATH 解决 home cachelib 不到

这个问题困扰了我很久,受GPT4的指点才解决的,这里记录一下解决问题的过程。

症状

$ ldd rocksdb-kvexe
        libfolly.so.0.58.0-dev => /home/admin/opt/cachelib/lib/libfolly.so.0.58.0-dev (0x00007ff382e00000)
        libthrift-core.so.1.0.0 => not found

$ ./rocksdb-kvexe 
./rocksdb-kvexe: error while loading shared libraries: libthrift-core.so.1.0.0: cannot open shared object file: No such file or directory

找不到这个库:libthrift-core.so.1.0.0。它在这里:

$ stat /home/admin/opt/cachelib/lib/libthrift-core.so.1.0.0
  File: /home/admin/opt/cachelib/lib/libthrift-core.so.1.0.0
  Size: 187504          Blocks: 368        IO Block: 4096   regular file
Device: 259,2   Inode: 950220      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   admin)   Gid: ( 1000/   admin)
Access: 2023-12-24 16:23:10.233856940 +0000
Modify: 2023-12-23 12:44:00.000000000 +0000
Change: 2023-12-23 12:49:50.050831528 +0000
 Birth: 2023-12-23 12:49:50.050831528 +0000

我们检查一下RUNPATH

readelf -d rocksdb-kvexe | grep PATH
 0x000000000000001d (RUNPATH)            Library runpath: [/home/admin/rocksdb/build:/home/admin/opt/cachelib/lib]

它已经包含了libthrift-core.so.1.0.0所在的目录/home/admin/opt/cachelib/lib。说明RUNPATH没有问题。而且跟它同目录的libfolly.so.0.58.0-dev也找到了,说明问题不是出在binary的RUNPATH上。

排查问题

GPT4建议我用LD_DEBUG=libs来debug链接的过程:

LD_DEBUG=libs ./rocksdb-kvexe

其中有这样一段:

   1654057:     find library=libthrift-core.so.1.0.0 [0]; searching
   1654057:      search path=/home/admin/CacheLib/opt/cachelib/lib/glibc-hwcaps/x86-64-v4:/home/admin/CacheLib/opt/cachelib/lib/glibc-hwcaps/x86-64-v3:/home/admin/CacheLib/opt/cachelib/lib/glibc-hwcaps/x86-64-v2:/home/admin/CacheLib/opt/cachelib/lib/tls/haswell/avx512_1/x86_64:/home/admin/CacheLib/opt/cachelib/lib/tls/haswell/avx512_1:/home/admin/CacheLib/opt/cachelib/lib/tls/haswell/x86_64:/home/admin/CacheLib/opt/cachelib/lib/tls/haswell:/home/admin/CacheLib/opt/cachelib/lib/tls/avx512_1/x86_64:/home/admin/CacheLib/opt/cachelib/lib/tls/avx512_1:/home/admin/CacheLib/opt/cachelib/lib/tls/x86_64:/home/admin/CacheLib/opt/cachelib/lib/tls:/home/admin/CacheLib/opt/cachelib/lib/haswell/avx512_1/x86_64:/home/admin/CacheLib/opt/cachelib/lib/haswell/avx512_1:/home/admin/CacheLib/opt/cachelib/lib/haswell/x86_64:/home/admin/CacheLib/opt/cachelib/lib/haswell:/home/admin/CacheLib/opt/cachelib/lib/avx512_1/x86_64:/home/admin/CacheLib/opt/cachelib/lib/avx512_1:/home/admin/CacheLib/opt/cachelib/lib/x86_64:/home/admin/CacheLib/opt/cachelib/lib(RUNPATH from file /home/admin/opt/cachelib/lib/libthriftprotocol.so.1.0.0)

可以看到,libthrift-core.so.1.0.0libthriftprotocol.so.1.0.0的dependency,所以查找libthrift-core.so.1.0.0的时候会在libthriftprotocol.so.1.0.0的RUNPATH而不是rocksdb-kvexe的RUNPATH里找,而libthriftprotocol.so.1.0.0的RUNPATH是错误的,导致了libthrift-core.so.1.0.0找不到。

解决方案

GPT4说可以直接用patchelf --set-rpath来更正library的RUNPATH:

cd ~/opt/cachelib/lib
patchelf --set-rpath $(pwd) libthriftprotocol.so.1.0.0

问题解决。

注意不能把RUNPATH设置成相对路径,因为链接器在RUNPATH里找的时候是在当前工作目录解析RUNPATH的,而不会相对于库的路径去解析RUNPATH里的相对路径。

标签:opt,CacheLib,lib,admin,RUNPATH,解决,home,cachelib,不到
From: https://www.cnblogs.com/searchstar/p/18303607

相关文章

  • JAVA编辑word替换指定内容,解决插入图片显示不全问题
    在开发过程中,我们可能会遇到需要生成word,或者通过模板word替换相应内容的需求。但在文档中插入图片时,如果段落格式设置不对,就会导致图片只显示一点点或者不显示。接下来就介绍一下java编辑word和插入图片需怎么处理。1.引入依赖首先我们在项目中引入ApachePOI,用于读取和操作wor......
  • 集团货币金额与本位币金额不一致的原因及解决办法
    项目场景:在给客户做年结时,我们发现集团货币金额跟公司代码货币金额不一致。问题描述公司启用了集团货币。OB22这里定义了公司代码使用的第二本位币为集团货币(如无必要,不要定义)或者集团货币和公司本位币保持一致:解决方案:需要在定义评估范围时,将集团货币也加到评估范......
  • MySQL的并发问题的解决方案
    怎么解决脏读、不可重复读、幻读这些问题呢?其实有两种可选的解决方案方案一、读操作利用MVCC(多版本并发控制),写操作进行加锁。所谓的MVCC,就是生成一个ReadView,通过ReadView找到符合条件的记录版本(历史版本由undolog日志构成)。查询语句只能读到在生成ReadView之前已提交事所做的......
  • 解决equal to 运算中 "Chinese_PRC_CI_AS" 和 "Chinese_PRC_CS_AS" 之间的排序规则冲
    背景:在语句执行过程中碰到equalto运算中"Chinese_PRC_CI_AS"和"Chinese_PRC_CS_AS"之间的排序规则冲突的报错时,可以用COLLATE定义和控制字符数据排序规则。在SQLServer中,COLLATE是用于定义和控制字符数据排序规则(collation)的关键字。排序规则影响字符串比较和排序的行......
  • 2024年职业院校大数据实验室建设及大数据实训平台整体解决方案
    随着大数据技术的飞速发展,职业院校的大数据实验室建设与实训平台的打造成为教育领域关注的焦点。为了培养适应时代需求的专业人才,2024年的职业院校大数据实验室建设将遵循以下原则与策略:首要任务是明确实验室建设的学科定位,结合学校特色与行业优势,制定人才培养目标。这要求我......
  • 2024年中职人工智能实验室建设及人工智能实训平台整体解决方案
    随着人工智能技术的日益成熟与广泛应用,中等职业教育在培养未来技能型人才方面扮演着越来越重要的角色。为了响应时代需求,提升中职学生在人工智能领域的专业素养与实践能力,特制定《2024年中职人工智能实验室建设及人工智能实训平台整体解决方案》。1、中职人工智能实验室的建设......
  • 记录解决QT父子窗口互传值、一些数据类型转换问题
    @目录一、父子窗口互相传值①父向子窗口传递值②子向父窗口传递值二、数据类型转换①int转QString②int转16进制③QString转unsignedchar④unchar转QString⑤char转int⑥QByteArray转16进制一、父子窗口互相传值①父向子窗口传递值父.hprivateslots:voidon_btnMore_c......
  • 大数据之路 读书笔记 Day5 数据同步遇到的问题与解决方案
    回顾Day4数据同步Day3无线客户端的日志采集1.分库分表的处理分库分表(Sharding)是数据库水平扩展的一种策略,当单个数据库的性能和存储能力无法满足应用需求时,可以采用分库分表来分散数据和查询负载。它通常包括两个方面:分库(DatabaseSharding)和分表(TablePartitio......
  • 学习总结:数据分析方法(侧重于解决实际问题)
    目录一、战略与组织SWOT分析PEST分析BSC平衡计分卡波特五力模型BCG矩阵GE矩阵二、质量与生产TPMTQM六西格玛OPTPDCAAUDIT法(汽车行业)三、营销服务STP分析4Ps普销组合SPIN销售法安索夫矩阵推销方格理论哈夫模型四、财务管理z-SCORE模型ABC成本法杜邦分......
  • 面试中如果被问到项目遇到的难题如何解决
    1大数据量问题:一案例:在一个电子商务平台中,随着用户和交易量的增长,数据库中的订单数据量迅速增加,导致查询和分析变得非常缓慢。二解决方案:1数据库分片:具体实现可以使用数据库中间件如ShardingSphere,它支持多种分片策略,如哈希分片、范围分片等。例如,可以根据......