Mój program zależy od libcurl.so.3
, ale w RHEL6, nie ma miękkiego jak ten libcurl.so.3 ->libcurl.so.4
(mój program może działać sprawnie, gdy utworzę ten link). Ale jest takie miękkie łącze: libcurl.so->libcurl.so.4
.Czy istnieje sposób, aby zmienić SONAME pliku binarnego bezpośrednio?
Chciałbym zmodyfikować SONAME
z libcurl.so.3.0.0.0
bezpośrednio z libcurl.so.3
na libcurl.so
. Wtedy mogę uruchomić mój program na RHEL 6 bez tworzenia miękkiego łącza.
Może moje rozwiązanie jest głupie, ale myślę, że nauka modyfikowania binarnego bezpośrednio jest interesującą rzeczą.
Przepraszam za komentarz, devnull. może nie powiedziałem jasno.
$ readelf -d libcurl.so.3.0.0
dynamiczny segment na offsetowej 0x303cc zawiera 25 pozycje:
Tag Type Nazwa/Wartość
0x00000001 (potrzebne) wspólna biblioteka: [libssl .so.2]
0x0000000e (soname) soname Biblioteka: [libcurl.so.3] ---> chciałbym zmienić to libcurl.so
Co mówisz jest * * zmiana nazwy pliku lub dowiązania, to nie zmieniającą * * binarnym. – devnull
Możesz utworzyć kopię pliku "libcurl.so.4", zmienić nazwę na "libcurl.so.3" i użyć edytora szesnastkowego, aby zmienić nazwę wpisu SONAME z "libcurl.so.4" na "libcurl.so.3 ". Często to nie zadziała, ponieważ informacje o wersji są również obecne w bibliotekach dynamicznych. –
Myślę, że najprostszym sposobem na to jest odbudowanie biblioteki libcurl i zhackowanie reguł kompilacji, aby uzyskać SONAME, której potrzebujesz. W przypadku zmian po kompilacji nie zalecałbym edycji binarnej. Istnieje projekt na temat łatania formatu ELF http://nixos.org/patchelf.html, nie pozwala on na zmianę SONAME, ale może dostarczyć trochę pomysłu na wdrożenie tego typu. – joetde