Pytania otagowane jako dynamic-linking

W komputerach dynamiczne łączenie to proces systemu operacyjnego (OS), który ładuje (kopiuje z pamięci trwałej do pamięci RAM) i łączy (wypełnia tabele przeskoków i przenosi wskaźniki) biblioteki współdzielone potrzebne plikowi wykonywalnemu w czasie wykonywania, to znaczy kiedy jest wykonywany.

4
Jak działają liczby SO (obiekt współdzielony)?
Wiem, że współdzielone obiekty pod Linuksem używają „więc liczb”, a mianowicie, że różne wersje współdzielonego obiektu mają różne rozszerzenia, na przykład: example.so.1 example.so.2 Rozumiem, że chodzi o to, aby mieć dwa różne pliki, tak aby dwie wersje biblioteki mogły istnieć w systemie (w przeciwieństwie do „DLL Hell” w systemie Windows). …

4
Gdzie pliki wykonywalne szukają współdzielonych obiektów w czasie wykonywania?
Rozumiem, jak zdefiniować dołączone obiekty w czasie łączenia / kompilacji. Nadal jednak zastanawiam się, jak pliki wykonywalne szukają współdzielonego obiektu ( *.sobibliotek) w czasie wykonywania. Na przykład moja aplikacja a.outwywołuje funkcje zdefiniowane w lib.sobibliotece. Po kompilacji przechodzę lib.sodo nowego katalogu w moim $HOME. Jak mogę powiedzieć, a.outżeby tam poszukać?

2
Otrzymywanie komunikatu „Nie znaleziono” podczas uruchamiania 32-bitowego pliku binarnego w 64-bitowym systemie
Mam obecnie dziwny problem z Debianem (wheezy / amd64). Utworzyłem chroota, aby zainstalować serwer (przepraszam, nie mogę podać więcej szczegółów). Nazwijmy jego ścieżkę /chr_path/. Aby to ułatwić, zainicjowałem tego chroota za pomocą paska debootstrap (także wheezy / amd64). Wyglądało na to, że wszystko działa dobrze w chroot, ale kiedy uruchomiłem …



3
Znajdź, gdzie jest symbol współdzielonej biblioteki zdefiniowany w systemie na żywo / wyświetl listę wszystkich symboli wyeksportowanych do systemu
Zasadniczo są to dwa pytania w jedno - ponieważ jeśli mogę wymienić wszystkie symbole wyeksportowane w systemie wraz z ich ścieżką do biblioteki współdzielonej, to mógłbym po prostu uzyskać grepten wynik. W przypadku symboli jądra wydaje mi się, że jest to nieco łatwiejsze - ponieważ zawsze możemy cat /proc/kallsymsuzyskać listę …

4
Plik wykonywalny systemu Linux kończy się niepowodzeniem z powodu „Nie znaleziono pliku”, nawet jeśli plik tam jest i w PATH
Chcę uruchomić wineplik wykonywalny (wersja 2.12), ale pojawia się następujący błąd ( $= monit powłoki): $ wine bash: /usr/bin/wine: No such file or directory $ /usr/bin/wine bash: /usr/bin/wine: No such file or directory $ cd /usr/bin $ ./wine bash: ./wine: No such file or directory Plik jest jednak tam: $ …

2
Jak zaktualizować bibliotekę współdzieloną bez awarii?
Tutaj napisano, że możesz przepisać plik wykonywalny, a proces będzie działał dobrze - zostanie ponownie odczytany po ponownym uruchomieniu procesu. Jednak gdy próbuję zastąpić plik binarny podczas procesu (za pomocą scp, od dewelopera do serwera testowego), mówi „plik zajęty”. A jeśli zastąpię plik biblioteki współdzielonej (* .so), wszystkie procesy, które …

1
Dlaczego systemy Unix / Linux nie przeglądają katalogów, dopóki nie znajdą wymaganej wersji połączonej biblioteki?
Mam binarny plik wykonywalny o nazwie „alpha”, który wymaga połączonej biblioteki (libz.so.1.2.7), która jest umieszczona w /home/username/myproduct/lib/libz.so.1.2.7 Eksportuję to samo do mojej instancji terminala przed spawnem mojego binarnego pliku wykonywalnego, wykonując następujące polecenie. export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH Teraz, gdy odradzam inną aplikację „brawo”, która wymaga tej samej biblioteki, ale innej wersji, tj. …

9
Problem z uruchomieniem java w Debianie: „błąd podczas ładowania bibliotek współdzielonych: libjli.so”
Próbuję uruchomić java: $ java -version java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory $ ldd /usr/lib/jvm/java-6-openjdk/jre/bin/java linux-gate.so.1 => (0xb779f000) libz.so.1 => /usr/lib/libz.so.1 (0xb7780000) libpthread.so.0 => /lib/i686/cmov/libpthread.so.0 (0xb7767000) libjli.so => /usr/lib/jvm/java-6-openjdk/jre/bin/../lib/i386/jli/libjli.so (0xb7762000) libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb775e000) libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7603000) /lib/ld-linux.so.2 …

1
Instalowanie dwóch glibc wraz z debian / ubuntu
Czy można zainstalować i używać dwóch różnych wersji glibc na tym samym komputerze? Gdzie jedna wersja służy tylko do uruchamiania starszego oprogramowania, które opiera się na starych plikach binarnych glibc? Czy można to zrobić za pomocą menedżera pakietów (coś w rodzaju „zainstaluj ten pakiet i jego zależności /opt/old-glibc, zamiast) zamiast …

3
Dowiedz się, czy biblioteka jest na ścieżce
Zakładając, że chcę przetestować, czy biblioteka jest zainstalowana i używana przez program. Mogę użyć, ldconfig -p | grep mylibaby dowiedzieć się, czy jest on zainstalowany w systemie. ale co, jeśli biblioteka jest znana tylko poprzez ustawienie LD_LIBRARY_PATH? W takim przypadku program może znaleźć bibliotekę, ale ldconfignie będzie. Jak mogę sprawdzić, …


2
Czy mogę używać własnej pamięci podręcznej ld.so.?
ldconfig ma dwie interesujące opcje: -f conf Use conf instead of /etc/ld.so.conf. -C cache Use cache instead of /etc/ld.so.cache. Próbowałem skopiować /etc/ld.so.confdo własnego katalogu domowego i edytowałem go tak, aby zawierał ścieżki do lokalnych bibliotek, np. /home/syockit/local/usr/libItp. I uruchomiłem ldconfig -f /home/syockit/ld.so.conf -C /home/syockit/ld.so.cache a następnie, aby potwierdzić, że biblioteki …

1
W jakiej kolejności dynamiczny linker Linuksa szuka ścieżek?
To nie jest duplikat, ponieważ dotyczy osobliwości, którą zauważyłem, gdy używam /etc/ld.so.conf. Aby uzyskać ścieżki, w których dynamiczny linker szuka bibliotek, uruchamiam polecenie ldconfig -v | grep -v "^"$'\t' | sed "s/:$//g". Kiedy /etc/ld.so.confnie ma na nim żadnych ścieżek. Dane wyjściowe z poprzedniego polecenia to /lib /usr/lib Uznałem, że /libnajpierw …

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.