Zum Inhalt springen

[C/Linux] Wo finde ich die header-files und Funktionsdefinitionen?


Empfohlene Beiträge

Geschrieben

Heyo,

möchte mich ein bisschen in den Definitionen der Funktionen umsehen. Ich find die C-Header auf meinem Ubuntu Karmic nicht, kann mir da jemand weiterhelfen?

Zweitens: Ich erinnere mich aber, dass die Header nur die Deklarationen beinhalteten, d.h. int printf(char *s); zum Beispiel.

Wo werden die Funktionen denn ausgeschrieben (also definiert) gespeichert?

Würde echt gern wissen, wie so die ein oder andere Funktion, äh.. funktioniert :)

Danke schonmal,

--Alex

Geschrieben

Ubuntu kommt von Haus aus nur mit dem Nötigsten ;)

Ich weiß nichtmal, ob da überhaupt "make" mitgeliefert wird.

Insofern

sudo aptitude install gcc libc6-dev

und Du solltest mit dem Wichtigsten versorgt sein. Entsprechend mußt Du Dir bei Bedarf auch die anderen "dev"-Pakete ziehen.

Da ist Gentoo bspw. ein wenig komfortabler :D

Geschrieben

Hi,

Wo werden die Funktionen denn ausgeschrieben (also definiert) gespeichert?

um die anzusehen, musst auch noch die glibc-source installieren. Dort liegen so Core Funktionen wie prinft, malloc etc. drin. Das ist aber recht komplex.

Geschrieben

Hiho,

danke für die Antworten. glibc6-dev war tatsächlich schon installiert. (make übrigens auch :D), allerdings, ähem, ist mir fast peinlich, aber: wo liegen die files denn?

Geschrieben
Hiho,

allerdings, ähem, ist mir fast peinlich, aber: wo liegen die files denn?

Welche? Die Header oder die Libs?

Die Libs typischerweise unter /lib oder /lib64 bzw /lib32

die Header unter /usr/lib32 oder /usr/lib64 ..../<gcc-profile>/include

für den Kernel unter /usr/src/<kernel source>/include

Warum willst Du das wissen, wenn Du selbst includierst werden die entsprechenden Verzeichnisse automatisch nach den passenden Headerdateien durchsucht und sofern sie installiert sind, kannst Du kompilieren.

Der Linker durchsucht auch die unter /etc/ld.so.conf gelisteten Verzeichnisse nach den Libs, so dass man diese nur über das I-Flag des GCC angeben muss

Geschrieben
Welche? Die Header oder die Libs?

Die Libs typischerweise unter /lib oder /lib64 bzw /lib32

die Header unter /usr/lib32 oder /usr/lib64 ..../<gcc-profile>/include

für den Kernel unter /usr/src/<kernel source>/include

Warum willst Du das wissen, wenn Du selbst includierst werden die entsprechenden Verzeichnisse automatisch nach den passenden Headerdateien durchsucht und sofern sie installiert sind, kannst Du kompilieren.

Der Linker durchsucht auch die unter /etc/ld.so.conf gelisteten Verzeichnisse nach den Libs, so dass man diese nur über das I-Flag des GCC angeben muss

Ich find in /lib (sowie /usr/lib) viele viele *.so Dateien (das sind binäre, hm?), aber keine C Quelltexte. Irgendwas mach ich falsch.

Ich will das wissen, weil ich z.B. sehen will, wie getaddrinfo() geschrieben ist. Das Inkludieren klappt, sicher. Aber ich möcht mir die Files mal ansehen, WAS da überhaupt drinsteht :)

Geschrieben
Ich find in /lib (sowie /usr/lib) viele viele *.so Dateien (das sind binäre, hm?), aber keine C Quelltexte. Irgendwas mach ich falsch.

Du brauchst für die Benutzung nicht die Codes. Für die Benutzung reicht der Header + die binäre Datei zum linken

Ich will das wissen, weil ich z.B. sehen will, wie getaddrinfo() geschrieben ist. Das Inkludieren klappt, sicher. Aber ich möcht mir die Files mal ansehen, WAS da überhaupt drinsteht :)

Du brauchst die *.c bzw *.cpp Dateien und die findest Du innerhalb Deines Paketbaums als entsprechende devel-Pakete. Alternativ schaut man auf der Webseite der Entwickler nach, meist kann man dort die Source laden bzw aus einem SVN auschecken

Geschrieben

Hi,

wie schon erwähnt, du musst für die Quellcodes der glibc das entsprechende Paket installieren. Die Dateien liegen dann unter Ubunutu hier:

/usr/src/glibc/glibc-<VERSION>

Getaddrinfo z.B.hier:

usr/src/glibc/glibc-<VERSION>/posix/getaddrinfo.c

Aber das ist nicht nur C, viele Routinen sind auch in Assembler geschrieben.

Du musst dir dann allerdings auch die Makefiles angucken, damit du weisst, was alles dazuverlinkt wird. Das kann schon sehr komplex werden.

Geschrieben (bearbeitet)
Du brauchst für die Benutzung nicht die Codes. Für die Benutzung reicht der Header + die binäre Datei zum linken

Du brauchst die *.c bzw *.cpp Dateien und die findest Du innerhalb Deines Paketbaums als entsprechende devel-Pakete. Alternativ schaut man auf der Webseite der Entwickler nach, meist kann man dort die Source laden bzw aus einem SVN auschecken

Jup, für die Benutzung. Ich möcht aber, wie gesagt, sehen, wie die Funktionen etc programmiert wurden.

Ich hab mir jetzt die gcc source geladen und da drin ein bisschen rumgestöbert. Ohne der Suche hätt ich mich da gar nicht zurecht gefunden :)

Ich finde z.B. stdio.h, aber nicht socket.h - sehr komisch. Weißt du da nen Grund dafür?

Und ich finde die Dateien, in denen z.B. malloc() definiert wird, noch nicht. In Windows (wo ich mir die gcc src geladen hab) kann ich glaube ich nicht nach Dateiinhalt suchen. :(

//edit:

Aber das ist nicht nur C, viele Routinen sind auch in Assembler geschrieben.

Du musst dir dann allerdings auch die Makefiles angucken, damit du weisst, was alles dazuverlinkt wird. Das kann schon sehr komplex werden.

Hm, ich hab gerade glibc installiert, /usr/src ist bis auf die "kernel-header" noch leer.

Ich glaube, ich geb einfach auf, und benutz die #include-Teile weiterhin als Black Box :(

Bearbeitet von Raiden86
Geschrieben

Ich finde z.B. stdio.h, aber nicht socket.h - sehr komisch. Weißt du da nen Grund dafür?

Und ich finde die Dateien, in denen z.B. malloc() definiert wird, noch nicht. In Windows (wo ich mir die gcc src geladen hab) kann ich glaube ich nicht nach Dateiinhalt suchen. :(

(

Es kann sein das du noch weitere *-dev Pakete nachinstallieren musst. Dafür bringt ja jede Distribution einen (guten) Paketmanager mit.

http://packages.ubuntu.com/

http://packages.ubuntu.com/de/hardy/apt-file

Du kannst mit der Windows-Dateiinhaltssuche nur in Dateien suchen, die im Windows "registriert" sind. Das kannst du deaktivieren so dass in allen Dateien gesucht wird [1]. Alternativ einen Editor wie Notepad++ verwenden, der kann das auch so.

[1] Suchkriterium "Ein Wort oder ein Begriff innerhalb der Datei" funktioniert eventuell nicht

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...