Forum: PC-Programmierung Bibliothek in C Entwicklungsumgebung hinzufügen


von Hermann (Gast)


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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Dateien, die auf *.h enden, sind keine Bibliotheken, und "verlinkt" wird 
mit denen auch nicht.

von Hermann (Gast)


Lesenswert?

Zur Ergänzung:
Als Entwicklungsrechner dient Ubuntu.
Die Bibliotheken sind alle unter /usr/include zu finden.

von Ralf (Gast)


Lesenswert?

Mit #include <gtk/gtk.h> versucht?

von Rufus Τ. F. (rufus) Benutzerseite


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"?

von Ralf (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Ralf (Gast)


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?

von Ralf (Gast)


Lesenswert?

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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Rolf M. (rmagnus)


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

: Bearbeitet durch User
von StinkyWinky (Gast)


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"...

von Der Andere (Gast)


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.

von Rolf M. (rmagnus)


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

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
Noch kein Account? Hier anmelden.