Co to są pliki .a i .so?

Odpowiedzi:

483

Biblioteki archiwów (.a) są połączone statycznie, tj. Podczas kompilacji programu z opcją -c w gcc. Tak więc, jeśli nastąpi jakaś zmiana w bibliotece, musisz ponownie skompilować i skompilować kod.

Zaletą .so (obiekt współdzielony) nad biblioteką .a jest to, że są one połączone w czasie wykonywania, tj. Po utworzeniu opcji -o pliku -o w gcc. Jeśli więc wystąpią jakiekolwiek zmiany w pliku .so, nie trzeba ponownie kompilować programu głównego. Ale upewnij się, że twój program główny jest połączony z nowym plikiem .so za pomocą polecenia ln.

Pomoże Ci to zbudować pliki .so. http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

Mam nadzieję że to pomoże.

Liściasty
źródło
2
czy którykolwiek z nich dotyczy pic(kod niezależny od pozycji)?
transang
213

.a są bibliotekami statycznymi. Jeśli używasz kodu przechowywanego w nich, jest on pobierany z nich i osadzany we własnym pliku binarnym. W Visual Studio byłyby to pliki .lib.

.so są bibliotekami dynamicznymi. Jeśli używasz kodu przechowywanego w nich, nie jest pobierany i osadzany we własnym pliku binarnym. Zamiast tego jest to tylko odwołanie, więc plik binarny będzie od nich zależny, a kod z pliku zostanie dodany / załadowany w czasie wykonywania. W Visual Studio / Windows byłyby to pliki .dll (z małymi plikami .lib zawierającymi informacje o łączach).

Mario
źródło
cześć, czy jest jakaś opcja dekompilacji pliku .so w kodzie c / c ++.?
Jishant,
@Ancee: spójrz na to pytanie: stackoverflow.com/questions/205059/is-there-ac-decompiler
Paul Wintz
Mały .libplik dla .dllnazywa się biblioteką importu.
Programista zorientowany na pieniądze
13

Pliki .a są zwykle bibliotekami, które są statycznie połączone (lub dokładniej archiwizują), a także
są bibliotekami dynamicznie połączonymi.

Aby wykonać port, potrzebujesz kodu źródłowego, który został skompilowany do ich utworzenia, lub równoważnych plików na komputerze z systemem AIX.

żaglowiec
źródło
Jak zbudować aplikację, aby korzystać z plików .so?
Dunc
Istnieje wiele doskonałych referencji dotyczących tworzenia obu typów bibliotek i łączenia z nimi w Internecie. Google to twój przyjaciel.
David Pointer
@ Dunc - Istnieje kilka sposobów. Czy masz plik makefile? Zwykle polecenie, które składa cały program (a zatem wywołuje konsolidator), określa miejsca, w których należy szukać plików bibliotek za pomocą opcji -L / dir / dir1 /.../, a także może jawnie nazywać biblioteki za pomocą opcji -lname. Przekonasz się, że rzeczywista nazwa to libname.a lub libname.so. Linker może następnie dowiedzieć się, co zrobić, jeśli jest to racjonalnie normalny program. Ale nadal masz problem z utworzeniem lub znalezieniem pliku .so. Czy masz kod źródłowy, aby go zbudować, lub bibliotekę AIX?
żarówka
10

Są używane na etapie łączenia. .apliki są połączone statycznie, a .sopliki są posortowane tak, że biblioteka jest potrzebna za każdym razem, gdy uruchamiasz exe.

Możesz znaleźć miejsce, w którym są przechowywane, przeglądając dowolny z katalogów lib ... /usr/libi /libmasz większość z nich, a także LIBRARY_PATHzmienną środowiskową.

Matt
źródło
0

Wikipedia jest godnym źródłem tych informacji.

Aby dowiedzieć się więcej o plikach biblioteki statycznej, takich jak .a, przeczytaj Statyczny biblioteka

Aby dowiedzieć się więcej na temat plików z bibliotekami współdzielonymi, takich jak .so, przeczytaj Library_ (computing) #Shared_libraries Na tej stronie znajdują się również przydatne informacje w sekcji Nazewnictwo plików .

użytkownik3731622
źródło