Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Headers, Include, Libraries - Wie geht das?

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
24.03.2011, 11:34 Uhr
~Unpro
Gast


Hallo,

ich komme aus einer anderen Programmiersprache und möchte ein C-Projekt in ebendiese einbinden.
Zum besseren Verständnis: Ich arbeite auf Blitzmax (OOP), welches einem ermöglicht, mittels des GNU-Compilers Sachen einzubinden.
Ich möchte also nicht C/C++ lernen, sondern nur das Library-System verstehen.
Leider wollen die Tutorials einem immer die Sprache beibringen...

Konkret liegen mir ein Ordner mit Header-Files und ein SRC-Ordner mit .c vor, außerdem liegen vereinzelt .a und .m Dateien herum.

Wie genau funktioniert das mit den Libraries, mit den Headern, und brauche ich die .c-Dateien?
Was für mich vor allem merkwürdig ist, ist dass die .h-Dateien nur die Funktionsdeklarationen haben, aber keinen wirklichen Quelltext (?)

Ich weiß, meine Frage ist wirklich doof, aber ich würde mich trotzdem sehr freuen, wenn sich jemand die Mühe macht, mir etwas zu erklären.

Gruß!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
24.03.2011, 16:48 Uhr
0xdeadbeef
Gott
(Operator)


Der Ablauf der Kompilation eines (einfachen) C-Programms ist hier sehr schön veranschaulicht:

www.eng.hawaii.edu/Tutor/Make/1-4.html

Statische Bibliotheken - das sind die .a-Dateien - sind im Wesentlichen ein Archiv, das eine Reihe von .o-Dateien enthält. Du kannst sie mit ar behandeln, beispielsweise gibt

C++:
ar t libfoo.a


die in libfoo.a eingepackten .o-Dateien aus. Es gehört noch ein kleines bisschen mehr dazu, aber das sind dann eher Implementationsdetails; wenn sie dich interessieren, schlag ranlib nach. Neben statischen gibt es auch dynamische Bibliotheken (unter Linux mit der Endung .so); diese werden erst bei Programmstart an das Programm gelinkt. So können mehrere Programme die selbe Bibliotheksdatei benutzen, man spart Platz, und neuere Versionen der Bibliothek können (Binärkompatibilität vorausgesetzt) dem Programm einfach untergeschoben werden, ohne es erneut linken zu müssen.

Per Konvention enthalten Header Deklarationen, die zum Gebrauch anderer Übersetzungseinheiten gebraucht werden. Im Beispiel, wie es hinter dem Link erklärt wird: Wenn du in green.c eine Funktion definierst und sie in blue.c benutzen willst, muss blue.c wissen, dass es diese Funktion gibt, sie aber selbst nicht definieren (sonst wüsste der Linker nachher nicht, welches Symbol er benutzen soll). Daher kommt die Deklaration der Funktion in den Header, die Definition in die Quelldatei. Technisch ist ein Header nur eine Textdatei, und #include macht (wie alle Präprozessordirektiven) schlicht Textersetzung.

C++:
#include "common.h"


bedeutet: Füge hier den Inhalt von common.h ein, bevor das Ganze an den Compiler geht. Ich kann prinzipiell

C++:
int
#include "foo.txt"
() { return 0; }


schreiben, wenn in foo.txt

Code:
main


steht. Ich sollte das aber nicht tun, weil da nachher keine Sau mehr durchfindet.

Ich vermute, dass die .m-Dateien Objective-C enthalten, kann das aber aus der Entfernung nicht sicher sagen.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
24.03.2011, 20:56 Uhr
~Unpro
Gast


Vielen Dank für deinen ausführlichen Beitrag - du hast mir wirklich sehr weitergeholfen!

Viele Grüße,
Unpro
 
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: