In meiner C Entwicklungsumgebung (Codeblocks oder Eclipse for C) möchte ich für zwei separate Projekte die Bibliotheken für CAN.h und gtk.h einbinden. Ich erhalte immer den Fehler "fatal error: Datei oder Verezichnis nicht gefunden". Die Dateien sind jedenfalls auf dem PC vorhanden. Wie verlinke ich darauf richtig?
Dateien, die auf *.h enden, sind keine Bibliotheken, und "verlinkt" wird mit denen auch nicht.
Zur Ergänzung: Als Entwicklungsrechner dient Ubuntu. Die Bibliotheken sind alle unter /usr/include zu finden.
Hermann schrieb: > Die Bibliotheken sind alle unter /usr/include zu finden. Da sind ganz sicher keine Bibliotheken zu finden; die gehören dort nicht hin. Dort liegen Headerdateien (*.h), die mit #include in den Quelltext eingebunden werden. Nicht ganz von ungefähr heißt das Verzeichnis deswegen auch "include". Bibliotheken heißen auf Deinem System *.a und sollten (u.a.) in /usr/lib zu finden sein. Auf welche Art und Weise hast Du versucht, "die Bibliotheken für CAN.h und gtk.h ein[zu]binden"?
Danke rufus für die Antwort. Für CAN: #include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <net/if.h> #include <linux/can.h> #include <linux/can/raw.h> #include <string.h> Für GTK: #include <gtk/gtk.h> P.S.: Wie man merkt in ich C-Neuling :)
Wenn Du Headerdateien in Spitzklammern einbindest, sucht der Compiler im sogenannten "include"-Pfad. Das ist eine Liste von Verzeichnissen, die dem Compiler über eine Kommandozeilenoption bekanntgegeben wird. Hermann schrieb: > Ich erhalte immer den Fehler "fatal error: Datei oder Verezichnis nicht > gefunden". Das aber ist keine Compilerfehlermeldung, das wird eine Fehlermeldung Deiner IDE sein. Oder hast Du einen lokalisierten Compiler, also einen, der alle Fehlermeldungen auf Deutsch ausgibt, unter Linux? So einen Unfug kenne ich nur von Microsoft.
Unter welchen Pfad (in Linux) muss ich das Header File kopieren, damit das von meiner IDE erkannt wird? Die Datei ist im include Pfad enthalten. Während z.B. stdio.h direkt im Verzeichnis /usr/inlude ist, ist gtk.h unter /usr/include/gtk-2.0 bzw. auch unter /usr/include/gtk-3.0 zu finden. Macht das für die Programmierung/#include einen Unterschied?
Ich formuliere meine Frage neu: Wie kann ich Codeblocks (oder Eclipse) mitteilen, dass meine Datei die ich inkludieren will unter /include/gtk-3.0/gtk/gtk.h liegt und nicht unter /include/gtk/gtk.h?
Ralf schrieb: > ist gtk.h unter /usr/include/gtk-2.0 bzw. auch unter > /usr/include/gtk-3.0 zu finden. > Macht das für die Programmierung/#include einen Unterschied? Ja, allerdings; das sind zwei verschiedene Versionen.
Ralf schrieb: > Unter welchen Pfad (in Linux) muss ich das Header File kopieren, damit > das von meiner IDE erkannt wird? Umgekehrt wird ein Schuh draus. Du musst deiner IDE sagen, wo die Files liegen. > Die Datei ist im include Pfad enthalten. Während z.B. stdio.h direkt im > Verzeichnis /usr/inlude ist, ist gtk.h unter /usr/include/gtk-2.0 bzw. > auch unter /usr/include/gtk-3.0 zu finden. > Macht das für die Programmierung/#include einen Unterschied? Ja selbstverständlich. Das eine ist für Gtk Version 2.0, das andere für Version 3.0. Du musst natürlich das nehmen, das zu der Gtk-Version passt, die du verwenden willst. Ich empfehle die Verwendung von pkg-config. Das kann dir die Include-Pfade passend für die Compiler-Kommandozeile angeben. Wenn du z.B. Gtk 2 haben willst:
1 | pkg-config --cflags gtk+-2.0 |
:
Bearbeitet durch User
In Codeblocks unter "Project build options", "Search directories" "Compiler" die fehlenden Pfade zu den *.h Dateien angeben. Bei Eclipse unter "Properties" C/C+ Build", "Settings", "Includes"...
Nur noch mal zur Erinnerung: Die *.h Dateien sind nur eine 'Beschreibung' der Bibliothek für den Compiler. Die eigentlichen Bibliotheken haben meist eine Endung ".a" und deine IDE muss abenfalls wissen wo diese Dateien sind, wenn sie nicht in Rufus Τ. F. schrieb: > Bibliotheken heißen auf Deinem System *.a und sollten (u.a.) in /usr/lib > zu finden sein. Was man vermeiden sollte wenn man ggf. verschiedene Versionen der Bibliotheken in verschiedenen Projekten verwenden will.
Der Andere schrieb: > Nur noch mal zur Erinnerung: > Die *.h Dateien sind nur eine 'Beschreibung' der Bibliothek für den > Compiler. > Die eigentlichen Bibliotheken haben meist eine Endung ".a" und deine IDE > muss abenfalls wissen wo diese Dateien sind, wenn sie nicht in Es dürfte wahrscheinlicher sein, dass es .so-Files sind, also Shared Objects. Auch die dafür nötigen Compiler-Kommandozeilen-Optionen kann man sich übrigens von pkg-config holen:
1 | pkg-config --libs gtk+-2.0 |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.