我尝试使用patchelf更改python的RPATH,以指向本地安装的新更新库。但是python仍然无法找到新的库。在
相反,如果设置LD_LIBRARY_PATH环境变量,那么python可以正常工作。在
我正在做以下事情
patchelf --set-rpath /home/user/new_lblas/ /home/user/.local/python
其中new_lblas
指向更新包,如intel lapack、blas等
如果我现在这样做,python -c 'import numpy'
,它会抱怨找不到{LD_LIBRARY_PATH=/home/user/new_lblas
,那么python中的import numpy
工作正常。在
有人能帮我找出我犯了什么错误吗?在
执行patchelf后,readelf -d /home/user/.local/python
的输出如下所示
Dynamic section at offset 0x270 contains 26 entries:
Tag Type Name/Value
0x000000000000001d (RUNPATH) Library runpath: [/home/user/new_lblas]
0x0000000000000001 (NEEDED) Shared library: [libpthread.so.0]
0x0000000000000001 (NEEDED) Shared library: [libdl.so.2]
0x0000000000000001 (NEEDED) Shared library: [libutil.so.1]
0x0000000000000001 (NEEDED) Shared library: [librt.so.1]
0x0000000000000001 (NEEDED) Shared library: [libm.so.6]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000c (INIT) 0x41b700
0x000000000000000d (FINI) 0x569238
0x000000006ffffef5 (GNU_HASH) 0x4146b0
0x0000000000000005 (STRTAB) 0x3ff460
0x0000000000000006 (SYMTAB) 0x4085c0
0x000000000000000a (STRSZ) 37214 (bytes)
0x000000000000000b (SYMENT) 24 (bytes)
0x0000000000000015 (DEBUG) 0x0
0x0000000000000003 (PLTGOT) 0x7f9fe8
0x0000000000000002 (PLTRELSZ) 8040 (bytes)
在执行patchelf之前,ELF头如下所示
^{pr2}$
至少有3种方法可以设置动态链接器搜索路径:
export LD_LIBRARY_PATH=/home/user/new_lblas
/home/user/new_lblas
设置DT_RPATH
动态标记DT_RUNPATH
设置DT_RUNPATH
动态标记。在上面的#1和#2是等价的,但是#3(这是您正在做的)不是。区别很微妙:只影响二进制文件,不会递归地应用于该二进制文件加载的共享库。在
RPATH
影响二进制文件和所有共享库,但是^{这就解释了}却不起作用
LD_LIBRARY_PATH
起作用,而{查看patchelfman page,您似乎想要:
相关问题 更多 >
编程相关推荐