Hi,
die Frage ist sicher super einfach, aber ich finde bis jetzt keine verständliche Antwort:
.so sind üblicher weise dynamische Libs und werden zu laufzeit nachgeladen.
.a sind statische libs und werden vom linker zum programm gelinked.
Aber was ist .la ??
Ich sehe das öfter, kann mir aber keinen Reim drauf machen
wenn ich eine Anweisung beim linken gebe wie -lpng sucht er doch nach libpng.a und nicht
.la oder ?
Ciao
Matze
Einfache Frage: Unterschied .a .la Libs ?
Hallo,
meines wissens sind .la .a Dateien die vom 'libtool' produziert werden und somit eine spezielle form der .a Dateien. Dass .a statisch waere ist mir uebrigens neu, meines Wissens sind nur .a Files nur Dateien die eine Sammlung von object-Dateien (.o) enthalten, welche wiederrum beim uebersetzen ohne Linken mit dem gcc (option -c) entstehen.
meines wissens sind .la .a Dateien die vom 'libtool' produziert werden und somit eine spezielle form der .a Dateien. Dass .a statisch waere ist mir uebrigens neu, meines Wissens sind nur .a Files nur Dateien die eine Sammlung von object-Dateien (.o) enthalten, welche wiederrum beim uebersetzen ohne Linken mit dem gcc (option -c) entstehen.
eine statische Library ist ja auch nur ein Archiv ( daher .a ) von Objekt Dateien und einem Index der ebenso in dem Archiv gespeichert wird (siehe "ranlib", bzw "ar -s")_mh_ hat geschrieben:Dass .a statisch waere ist mir uebrigens neu, meines Wissens sind nur .a Files nur Dateien die eine Sammlung von object-Dateien (.o) enthalten, welche wiederrum beim uebersetzen ohne Linken mit dem gcc (option -c) entstehen.
.so's können auch (bzw werden meistens auch) zum Programm dazu gelinkt (welche so's zu einem Programm dazugelinkt wurden, kannst du mit dem Befehl: "ldd programmname" anschauen) und werden vom "dynamic loader" (meistens) zum Programmstart geladen.barmeier hat geschrieben: .so sind üblicher weise dynamische Libs und werden zu laufzeit nachgeladen.
.a sind statische libs und werden vom linker zum programm gelinked.
.so's müssen aber nicht zum Programm dazu gelinkt werden, sondern können auch zur Laufzeit vom Programm selber geladen werden (über dlopen, LoadLibrary...)
.la sind eigentlich "intermediate Dateien" vom Libtool, und sind praktisch das Archiv der .lo Dateien.
Gruß
gms
Zum Linken von/mit "libtool libraries" müßtest du schon auch Libtool verwendenbarmeier hat geschrieben: na dann kann ich ja lange versuchen das .la file zu linken
Wenn diese ".la" Files mit installiert werden, kann Libtool sogar über Paketgrenzen hinweg verwendet werden.barmeier hat geschrieben: Was ich nicht ganz verstehe wozu brauche ich denn das .la file überhaupt ?
"_mmh_" und ich haben dir DIE Erklärung für die ".la" Dateien aus der Libtool-Anwendersicht geliefert. Aus Anwendersicht betrachtet handelt es sich hier um die "libtool libraries".barmeier hat geschrieben: na dann bin ich ja froh, das ich nicht der einzige bin, der das nicht wusste
Mit folgendem Kommando wird z.B. eine libtool library libhello.la aus libtool objects .lo's erzeugt.
Je nach Plattform bzw Konfiguration werden dann bei diesem Kommando auch zusätzliche statische bzw shared libraries erstellt. Das Kommando selber ist aber Plattform unabhängig und auch für statische und shared libraries gleich. Der Entwickler (Anwender) braucht sich daher um dieses Detail nicht mehr zu kümmen.http://www.gnu.org/software/libtool/manual.html#Linking-libraries hat geschrieben: burger$ libtool --mode=link gcc -g -O -o libhello.la foo.lo hello.lo \
-rpath /usr/local/lib -lm
"Joghurt" hat dir ein Implementierungsdetail von Libtool gezeigt. Dieses ist sicherlich auch sehr interessant und trägt auch zum Verständnis der Arbeitsweise von Libtool bei, für die Arbeit mit Libtool "sollte" diese Information jedoch unerheblich sein.
Gruß
gms