W systemie Windows pliki EXE i DLL zawierają informacje o wersji, w tym co najmniej następujące pola:
- wersja pliku
- Wersja Produktu
- Nazwa wewnętrzna
- Nazwa produktu
- prawa autorskie
W bibliotece Linux / Plik wykonywalny:
- Które pola są obecne?
- Jak wyświetlić takie informacje?
- Jakie narzędzia / biblioteki czytać?
executable
libraries
version
linquize
źródło
źródło
/sbin/ldconfig -p
Odpowiedzi:
Informacje o wersji nie są jawnie przechowywane w pliku ELF . To, co tam masz, to nazwa biblioteki
soname
, która zawiera wersję główną. Pełna wersja jest zwykle przechowywana jako część nazwy pliku biblioteki.Jeśli masz bibliotekę, powiedzmy
libtest.so
, to zazwyczaj masz:libtest.so.1.0.1
- Sam plik biblioteki zawierający pełną wersjęlibtest.so.1
- Symlink dolibtest.so.1.0.1
, o takiej samej nazwie jaksoname
libtest.so
- Symbollibtest.so.1
dowiązania używany do łączenia.W pliku biblioteki
libtest.so.1.0.1
znajdzie się wpis o nazwieSONAME
w sekcji dynamicznej, który powie, że ta biblioteka jest wywoływanalibtest.so.1
. Kiedy połączysz program z tą biblioteką, połączony program zapiszesoname
bibliotekę podNEEDED
pozycją w sekcji dynamicznej.Jeśli chcesz sprawdzić, co dokładnie znajduje się w pliku ELF, możesz spróbować uruchomić:
gdzie
elffile
może być biblioteka pliku wykonywalnego.Jeśli chcesz po prostu pobrać wersję biblioteki, możesz grać z:
AFAIK, nie ma takich informacji (przynajmniej domyślnie) w plikach wykonywalnych.
Lub możesz polegać na samym programie lub systemie pakowania, jak napisał Rahul Patil.
źródło
Możesz użyć
ldconfig -v | grep libraryname
, również polecenie ma opcjęcommand -V
lubbinaryfile --version
przykład:
możesz także użyć yum lub aptitude w oparciu o dystrybucję, której używasz np.
w RHEL5 / CENTOS5 / Fedora możesz użyć
yum info packagename
lub jeśli jest zainstalowany, użyjrpm --version packagename
W Ubuntu możesz użyć
aptitude show pkgname
lubdpkg --version pkgname
źródło
rpm
, myślę, że chceszrpm --query pkgname
do listy ciąg wersji (rpm --version
będzie wydrukować wersjęrpm
siebie, to samo może być prawdziwe w odniesieniu dodpkg
)W przypadku systemów opartych na Redhat wykonaj następujące czynności:
Sprawdź plik potrzebnych pakietów, upewnij się, że w nazwach plików bibliotek nie ma nazw ścieżek. Jeśli tak, usuń je, więc „/bin/lib/libx.so.1” zmień na „libx.so.1”
Dowiedz się, który pakiet zawiera bibliotekę
Lub umieść to w skrypcie lub uruchom z wiersza cmd:
Następnie utwórz następujący skrypt lub uruchom z wiersza cmd:
Skończyłeś, uruchom swój program. Jeśli podczas uruchamiania pojawią się błędy GUI. Skopiuj je, a jeśli są odwołaniami do biblioteki, znajdź dla nich pakiety i zainstaluj w ten sam sposób.
źródło
Uruchom to, aby uzyskać informacje o wersji -
strings libssl.so.1.0.0 | grep "1\.0"
źródło