Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge

wofür sind .lib

MRPSV / 4 Antworten / Baumansicht Nickles

hi leutz

ich hab mit c++ angefangen und ein paar tutorials durchgearbeitet aber bisher wurde nich gesagt wofür .lib dateien benötigt werden

danke im voraus

bei Antwort benachrichtigen
thomas woelfer MRPSV „wofür sind .lib“
Optionen

lib-dateien enthalten bereits kompilierten code (also funktionen oder klassen) die man wiederverwenden kann.

wenn du zum beispiel

printf("hello world");

aufrufst, dann muss der code fuer printf() ja irgendwo her kommen - und befinden tut er sich eben in einer .lib datei. (in der praxis befindet er sich da zwar heute eigentlich nicht mehr drin... aber das ist fuer diese betrachtung egal).

in der letzten phase des bauens der ausführbaren datei kommt der linker zum zuge. der liest die obj-datein (die sind das resultat des kompilierens) und verbindet diese, zusammen mit einigen inhalten aus der .lib datei) zum .exe

WM_HOPETHISHELPS

this posting contains no tpyos.
bei Antwort benachrichtigen
MRPSV Nachtrag zu: „wofür sind .lib“
Optionen

aso danke thomas

hmm nochwas ... in msdn in der opengl referenz sind funktionen dokumentiert in der .h dateien und auch .lib dateien aufelistet sind.
muss man beides einfügen oder wenn man beides zur hand hat kann man sich dann für ein entscheiden??

bei Antwort benachrichtigen
thomas woelfer MRPSV „aso danke thomas hmm nochwas ... in msdn in der opengl referenz sind funktionen...“
Optionen

nein, so geht das nicht.

die header-dateien enthalten die prototypen fuer die funktionen: ohne den prototyp kannst du die funktion gar nicht aufrufen.

die implementierung der funktion befindet sich aber in der lib (tun wir mal fuer den anfang so, als waere das tatsaechlich der fall).

du must also das header-file im quellcode inkludieren, bevor du eine der funktionen deren prototypen sich darin befinden benutzen kannst. die library must du dann mitlinken (was oft mit hilfe eines #pragmas aus dem header automatisch passiert.)

es gibt also nichts "auszusuchen".

warum schreiben ich immer "tun wir mal fuer den anfang so, als waere das der fall" ?

ganz einfach: klassischerweise befindet sich der code tatsaechlich in der library (lib). unter windows ist es aber eigentlich ueblich, die implementierung in einer dll unterzubringen. im gegensatz zur library (lib) die schon beim linken gebunden wird, wird die dll aber erst zur ladezeit der anwendung geladen.

das macht aber dem linker kummer: er sieht auf basis deines quellcodes, das du eine funktion xyz() verwendest - und will diese auch unbedingt aufloesen. gaebe es nun keine library mit dieser funktion, dann wuerde der linker ein "unresolved external" (nicht aufzuloesendes externes symbol) unmeckern und du wuerdest kein .exe bekommen.

darum gibts auch die libraries: da ist aber in wirklichkeit nicht die implementierung drin (obwohl sie es durchaus sein koennte), sondern nur ein stub-code mit der gleichen signatur, die den linker befriedigt - und beim laden durch die implementierung in der dll ersetzt wird.

WM_HOPETHISHELPS

this posting contains no tpyos.
bei Antwort benachrichtigen
MRPSV Nachtrag zu: „wofür sind .lib“
Optionen

ohh aso danke thomas... jetzt erklären sich auch einige fehler ;-)

bei Antwort benachrichtigen