我有一個系統「fsimage.so」,需要mkdirp,它恰好位於libgen.so中。但是fsimage.so不知道這一點。例如:我可以向現有的共享對象添加庫拒絕?
# ldd /usr/lib/python2.4/vendor-packages/fsimage.so
libfsimage.so.1.0 => /usr/lib/libfsimage.so.1.0
libxml2.so.2 => /lib/libxml2.so.2
libgcc_s.so.1 => /usr/sfw/lib/libgcc_s.so.1
libpthread.so.1 => /lib/libpthread.so.1
libz.so.1 => /lib/libz.so.1
libm.so.2 => /lib/libm.so.2
libsocket.so.1 => /lib/libsocket.so.1
libnsl.so.1 => /lib/libnsl.so.1
libc.so.1 => /lib/libc.so.1
libmp.so.2 => /lib/libmp.so.2
libmd.so.1 => /lib/libmd.so.1
# ./test
Traceback (most recent call last):
File "./test", line 26, in ?
import fsimage
ImportError: ld.so.1: isapython2.4: fatal: relocation error: file /usr/lib/python2.4/vendor-packages/fsimage.so: symbol mkdirp: referenced symbol not found
# LD_PRELOAD=/usr/lib/libgen.so ./test
Usage: ./test
當然,如果我有來源等,我可以簡單地再次將其鏈接,並添加「-lgen」,這將增加libgen.so作爲一個依賴。
但作爲hackery的練習,比方說我沒有任何資源,只是想補充說fsimage.so還需要加載libgen.so。使用elfedit/objcopy等,這是不可能的?我不認爲我可以使用「ld」來將.so用作輸入,並用額外的庫編寫一個新的.so文件?
# elfdump /usr/lib/python2.4/vendor-packages/fsimage.so|grep NEEDED
[0] NEEDED 0x5187 libfsimage.so.1.0
[1] NEEDED 0x5152 libxml2.so.2
[2] NEEDED 0x5171 libgcc_s.so.1
計算器在第一次嘗試,去容易對我:)
我運行elfedit所以我想編輯爲第一個參數和第二個新名稱,什麼也沒有發生。顯示幫助。儘管我在Linux上。 – kaneda 2014-10-13 19:04:09