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
Programmieren - alles kontrollieren 4.941 Themen, 20.708 Beiträge
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
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??
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
ohh aso danke thomas... jetzt erklären sich auch einige fehler ;-)