Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Empfohlene Antworten

Veröffentlicht

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

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

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.

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?

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

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 :)

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

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.

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

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.