Bibliothek in C Entwicklungsumgebung hinzufügen

Gast #5300801
Lesenswert?

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?
Persönliche Seite #5300810
Lesenswert?

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"?
Gast #5300811
Lesenswert?

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 :)
Persönliche Seite #5300816
Lesenswert?

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.
Gast #5300822
Lesenswert?

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?
#5300850
Lesenswert?

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
Gast #5301274
Lesenswert?

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"...
Gast #5301290
Lesenswert?

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.
#5301763
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren