Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Allgemeine Fragen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.01.2010, 17:13 Uhr
fr33g



Hey Leute, ich hätt mal ein paar allgemeine fragen,
und zwar, kann man ja zum beispiel bei code blocks bei den headerdateien aus wählen compilieren und linken.
compilieren is mir klar, da wird ja dann die header vorcompiliert also zwischengespeichert um zu verhindern dass große header die nicht geändert wurden immer wieder neu compiliert werden müssen bei änderungen im sourcecode.

so dort kann man aber auch linken auswählen, aber ich verstehe nicht für was? also was bezweckt das?

und dann wäre meine frage, wie ich auswählen kann dass ich statisch oder dynamisch linken kann.
den unterschied kenne ich, aber weiß nicht wie ich auswähle wie ich linken kann???
hoffe ihr könnt mir helfen.

vielen dank schonmal
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.01.2010, 21:29 Uhr
Hans
Library Walker
(Operator)


Hi,

eigentlich sollte es hier im Forum schon irgendwo stehen, aber ich bin gerade zu faul zum suchen... - Deshalb mal kurz:
Der Compiler erzeugt sogenannte Objektcode-Dateien, die unter Windows meisst die Endung .obj haben. Da steckt das in Maschienencode übersetzte Programm drin. Aber es fehlen auch Teile, wie die Funktionen des Standards (z.B. printf) oder auch die Systemaufrufe. Diese Teile stecken in den Bibliotheken, die oftmals die Endung .lib tragen. Sie müssen mit dem Inhalt der Objektdatei verbunden werden. Diese Aufgabe übernimmt der Linker (= Verbinder). Er verbindet also den Objektcode, den der Compiler produziert hat mit dem Code aus den Bibliotheken. Das Ergebniss steckt er in die Datei, die das ausführbare Programm wird, also die .exe Datei.

Jetzt zum Unterschied zwischen statischem und dynamischem linken:
Beim statischen linken werden alle Bibliotheksfunktionen, die das Programm aufruft in die .exe-Datei gepackt, was dazu führt, das die sehr lang werden kann.
Beim dynamischen linken wird dagegen nur ein spezieller Funktionsaufruf erzeugt. Die Funktion selbst befindet sich jedoch in einer .dll-Datei. Diese wird entweder mit dem Programm in den Speicher geladen, oder ist im Falle von Systemaufrufen schon im Speicher vorhanden, so das sie nicht mehr zusätzlich geladen werden muss. Im Ergebniss ist die Exe-Datei kürzer.

Soweit mal das Wesentliche. Tatsächlich ist die Sache noch etwas komplizierter, aber für's grundsätzliche Verständnis ausreichend.

Hans

P.S. jetzt ist die Sache doch wieder länger geworden als erwartet...
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.

Dieser Post wurde am 26.01.2010 um 00:50 Uhr von Hans editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.01.2010, 22:49 Uhr
fr33g



ok danke, jetzt ist mirs auf jeden fall mal klar.
wie ich meinem programm bzw dem linker sag dass er ne lib statisch linken soll weiß ich, wie kann ich ihm aber sagen dass er sie dynamisch linkt?
zum beispiel hab ich ne klasse die ich oft brauch, dann pack ich die in ne dll.
wie sag ich jetzt meim linker dass er die dynamisch linken soll???

danke schonmal
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
26.01.2010, 01:41 Uhr
Hans
Library Walker
(Operator)


Hi,

damit wären wir beim komplizierteren Teil der Sache angelangt...
Jetzt muss ich mich erst mal selbst korrigieren : dynamisches Linken wird nicht vom Linker beim Entwickeln vorgenommen, sondern vom Betriebssystem während das Programm läuft. Der Linker legt dazu nur die Informationen in der exe-Datei an, die das BS braucht, um dem Programm die Funktionen aus der DLL auch zugänglich machen zu können.

Um eine DLL zu erzeugen ist in der Entwicklungsumgebung in der Regel ein eigenes Projekt nötig, um den Code in eine DLL abzulegen. Ein Beispiel für ein Programm, das eine DLL benutzt findet sich auch hier in der Wikipedia. Hab es selber zwar noch nicht ausprobiert, werde das aber noch nachholen, und dann auch noch was dazu schreiben. Und wenn Du es ganz genau haben willst, wirst du früher oder später nicht um den Petzold herum kommen. Da steht es auf Seite 1145ff.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
26.01.2010, 23:52 Uhr
Hans
Library Walker
(Operator)


Hi,

schlechte Nachricht: das oben verlinkte DLL-Projekt aus der Wikipedia krieg ich mit meiner Open Watcom Compiler Suite gerade nicht richtig zusammen gesetzt. Ich erhalte zwar eine Objektdatei von dem Code, der in die DLL soll, aber auch immer 'ne Fehlermeldung, die besagt, das er keine Import-Library findet. Und ich hab noch nicht heraus gefunden, wie ich das make-programm dazu überrede, mir eine solche Import-library zu erstellen. (Oder wo ich das in der IDE einstelle.) Irgendwann hatte ich zwar plötzlich eine dll-Datei, weis aber nicht so recht, wie die entstanden ist, weil ich sie erst eine halbe Stunder später entdeckt habe. - Zuvor hat er sich geweigert, eine solche zu erstellen, weil ihm die Importlib fehlte. So verstehe ich jedenfalls bisher die Vorgehensweise meiner Programme.

Das Programm, das die DLL benutzen soll, hat er mir erstellt, aber das meldet mir dann halt, das es die Funktion nicht aufrufen konnte. Selbst wenn ich ihm die DLL in den Pfad kopiere, wo die .exe drin steht.
Der Bibliotheksmanager, ein weiteres Programm aus der Sammlung, ist schliesslich der Meinung, das in der DLL keine Funktionen zum exportieren vorhanden wären. Also ich bin da momentan etwas ratlos. - Bzw. muss mich noch mal durch die Bedinungsanleitungen durchwühlen...

Wäre noch anzumerken: an dem Projekt aus dem Buch vom Petzold hab ich mich noch nicht versucht, weil das auf Visual C++ zugeschnitten ist, was ich nicht habe. Und Open Watcom unterstützt anscheinend keine MS-VC Projektdateien; - jedenfalls weis ich davon nix. Deshalb lass ich von dem Projekt erst mal die Finger weg.

Hans
--
Man muss nicht alles wissen, aber man sollte wissen, wo es steht. Zum Beispiel hier: Nachdenkseiten oder Infoportal Globalisierung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.01.2010, 16:44 Uhr
~fr33g
Gast


Hey Hans, erst mal dankeschön.
Ich hab das jetzt auf jeden fall schonmal einigermaßen verstanden mit dem static links und dynamic.

werd die tage vll auch mal das programm aus der wiki probieren.

aber heute und morgen wohl eher net mehr, da ich morgen und übermorgen erst mal gesellenprüfung hab

melde mich dann auch nochmal
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: