我試着用patchelf改變python的RPATH指向本地安裝的新更新庫。但python仍然無法找到新的庫。爲python設置RPATH不起作用
相反,如果我設置了LD_LIBRARY_PATH環境變量,那麼Python工作正常。
我做了以下 patchelf --set-rpath /home/user/new_lblas/ /home/user/.local/python
其中new_lblas
點更新包,比如Intel的LAPACK,BLAS等等
如果我現在做的,python -c 'import numpy'
,它抱怨libblas.so.3gf
沒有找到。 但是,如果我設置環境變量LD_LIBRARY_PATH=/home/user/new_lblas
,然後import numpy
在Python中工作正常。
有人能幫我們弄清楚我在做什麼錯誤嗎?
從readelf -d /home/user/.local/python
做patchelf後的輸出如下
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頭看起來如下所示
Dynamic section at offset 0x1f9e00 contains 25 entries:
Tag Type Name/Value
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) 0x400298
0x0000000000000005 (STRTAB) 0x40f6a8
0x0000000000000006 (SYMTAB) 0x4035b8
0x000000000000000a (STRSZ) 36637 (bytes)
0x000000000000000b (SYMENT) 24 (bytes)
0x0000000000000015 (DEBUG) 0x0
0x0000000000000003 (PLTGOT) 0x7f9fe8
0x0000000000000002 (PLTRELSZ) 8040 (bytes)
0x0000000000000014 (PLTREL) RELA
請格式化你的問題所以它的可讀性。 –
@EmployedRussian對不起,格式不正確。現在希望它更好 – vicky
你的問題仍然缺乏所有相關的細節。在你運行'patchelf'之前還是之後'readelf -d'? '$ newpath'的價值是什麼?你怎麼知道它不工作? –