Могу ли я добавить ссылку на библиотеку к существующему общему объекту?

У меня есть система "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 в качестве зависимости.

Но в качестве упражнения по хакерству, скажем, у меня нет исходных текстов, и я просто хотел добавить, что 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

Первая попытка stackoverflow, полегче со мной :)

11
задан lundman 19 November 2010 в 03:37
поделиться