Seite 1 von 1

header bindet header ein

Verfasst: Mi Mär 27, 2013 4:01 pm
von Sportsfreund
Hallo,

ich habe mich schon gelentlich hier im Forum umgesehen und mich nun auch angemeldet. Also Guten Tag allerseits! :)

Über tutorials.at habe ich c "gelernt". Nun möchte ich mich in gtk für gnome einarbeiten, aber es fehlen mir doch noch ein paar Grundlagen.

Problem: Zuerst lieferte #include <gnome.h> ein Problem, weil gcc die Datei nicht finden konnte. Ich habe also das Paket libgnomeui-2.0 installiert. So weit so gut.

Nun folgt die nä#chste Fehlermeldung: kann gtk.h nicht finden!

In gnome.h finde ich zuoberst folgenden Eintrag:
#include <gtk/gtk.h>
#include <libgnome/libgnome.h>
#include <libgnomecanvas/libgnomecanvas.h>
#include <libgnomeui/libgnomeui.h>
gtk/gtk.h ist aber vorhanden.

Mein Versuch die Datei über
#include "/usr/include/gtk-3.0/gtk.h"
einzubinden funktioniert so nicht!

Ausserdem vermute ich, dass danach der naechste Header in der Liste fehlt.


Meine Frage:

Wie gehe ich in so einem Fall vor. Wäre es Klug gnome.h anzupassen? Vermutlich nicht! Oder muss ich die einzelnen Header in ein Verzeichnis stecken??

Oder gibt es noch einen anderen Weg?


Danke und Gruß
Sportsfreund

Re: header bindet header ein

Verfasst: Mi Mär 27, 2013 4:26 pm
von cloidnerux
Hi und Willkommen im Forum.

Ich gehe jetzt einfach mal davon aus, dass du Ubuntu benutzt.
Du brauchst zum Programmieren immer die Entwicklungspackete des Entsprechenden.
In deinem Fall wäre dies Ubuntu:

Code: Alles auswählen

libgtk2.0-dev
Wenn du das Installierst, sollte es Funktionieren.

Re: header bindet header ein

Verfasst: Mi Mär 27, 2013 4:29 pm
von Xin
Wat is dann mit Dir, Sportsfreund? (scnr)
Sportsfreund hat geschrieben:Über tutorials.at habe ich c "gelernt". Nun möchte ich mich in gtk für gnome einarbeiten, aber es fehlen mir doch noch ein paar Grundlagen.
Problem: Zuerst lieferte #include <gnome.h> ein Problem, weil gcc die Datei nicht finden konnte. Ich habe also das Paket libgnomeui-2.0 installiert. So weit so gut.

Nun folgt die nä#chste Fehlermeldung: kann gtk.h nicht finden!
Wie rufst Du den Compiler auf?

Schau mal in unser C-Tutorial, hier ist die Seite, die Dich interessiert, eventuell musst Du aber vorherige Seite auch lesen und verstehen.

Re: header bindet header ein

Verfasst: Mi Mär 27, 2013 9:20 pm
von Sportsfreund
Hallo und erst einmal Danke!

Ich werde die Seiten lesen. Nur mal vorneweg: Ja, ich benutze Ubuntu. libgtk2.0-dev ist aber bereits installiert! Daran kann es nicht liegen!

Den Compileraufruf erledigt geany für mich ;) :
gcc -Wall -c "%f"
Was mir aber gerade auffällt. Habe ich richtig auf gtk/gtk.h verwiesen?
Die gtk.h steht in
/usr/include/gtk-2.0/gtk
Gruß
Sportsfreund

Re: header bindet header ein

Verfasst: Mi Mär 27, 2013 9:33 pm
von Xin
Sportsfreund hat geschrieben:Den Compileraufruf erledigt geany für mich ;) :

Code: Alles auswählen

gcc -Wall -c "%f"
Joah, sowas habe ich mir gedacht. :-)
Sportsfreund hat geschrieben:Was mir aber gerade auffällt. Habe ich richtig auf gtk/gtk.h verwiesen?
Die gtk.h steht in

Code: Alles auswählen

/usr/include/gtk-2.0/gtk
Hast Du, aber Du musst dem Compiler das Verzeichnis nennen, in dem der gtk-Ordner zu finden ist.

Lies Dir auf der verlinkten Seite durch, wie du mit pkg-config die benötigten Verzeichnisse findest.

Für gnome musst Du ggfs. nicht nur gtk+-2.0 angeben, sondern das Gnome-Paket.

Re: header bindet header ein

Verfasst: Mo Apr 01, 2013 10:37 pm
von Sportsfreund
Hat geklappt. Falls es für jemanden interessant sein sollte:

Ich habe mir die oben im Beitrag gelinkten Seiten angesehen. Der Hinweis auf die gtk-demo hat mich dann veranlasst in die Konsole zu wechseln. Nachträglich finde ich es für Anfänger schon sinnvoll mit der Konsole zu beginnen. Die gtk-demo hat funktioniert. Für Fortgeschrittene ist die gtk-demo bestimmt ein prima Nachschlagewerk, besonders, weil dort auch der Code hinterlegt ist. Für mich war nur interessant, dass die gtk auf meinem Rechner funktioniert und vollständig installiert ist.

Nachdem ich mit

Code: Alles auswählen

gcc -o datei datei.c -I/usr/include/gtk-3.0
schon weiter gekommen bin als vorher, war dann aber schnell klar, dass der Spass an der Konsole nachlässt, wenn der Aufruf von gcc über mehrere Zeilen geht.

Beim Lesen der Seiten (s. oben) ist mir dann das kurze Tutorial über 'make' aufgefallen. Danach wurde es dann einfacher:

Code: Alles auswählen

CC = gcc
CFLAGS =
LDFLAGS =
OPT = -I/usr/include/gtk-3.0 \
        -I/usr/include/gdk-pixbuf-2.0 \
        -I/usr/lib/gtk-3.0/include \
        -I/usr/include/glib-2.0 \
        -I/usr/lib/i386-linux-gnu/glib-2.0/include \
        -I/usr/include/cairo \
        -I/usr/include/pango-1.0 \
        -I/usr/include/atk-1.0 \
        -I/usr/include/freetype2 \
        -I/usr/lib/glib-2.0/include \
        -I/usr/include/libpng12 \
        -I/usr/include/pixman-1 \
        -lgtk-x11-2.0 -lgdk-x11-2.0 \
        -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 \
        -lpango-1.0 -lgobject-2.0 -lcairo \
        -lgmodule-2.0 -ldl -lglib-2.0

datei:

        @$(CC) $(CFLAGS) $(LDFLAGS) -o datei datei.c $(OPT)

Allerdings hat es doch einige Zeit benötigt, die Dateien auf dem System zu finden, besonders, weil mir die Paketnamen fehlten. Wer den Paketnamen (des installierten) Paketes kennt kann den Pfad so herausfinden:

Code: Alles auswählen

pgk-config Paketname --cflags 
oder

Code: Alles auswählen

pgk-config Paketname --libs
Prinzipiell gibt es eine Zeit- und Nervenschonendere Methode, leider hat es bei mir nicht funktionert. Aber das ist dann ein anderes Thema: So soll es gehen:

Code: Alles auswählen

gcc -o datei datei.c 'pkg-config gtk+-2.0 --cflags --libs'
bei mir wie gesagt funktioniert es nicht.

Gruß
Sportsfreund

Re: header bindet header ein

Verfasst: Di Apr 02, 2013 1:29 pm
von Xin
Sportsfreund hat geschrieben:Ich habe mir die oben im Beitrag gelinkten Seiten angesehen. Der Hinweis auf die gtk-demo hat mich dann veranlasst in die Konsole zu wechseln. Nachträglich finde ich es für Anfänger schon sinnvoll mit der Konsole zu beginnen.
Schon komisch... genau das schreibe ich in den Tutorials auch so, aber irgendwie wird einem so etwas immer erst im Nachhinein geglaubt. :->
Sportsfreund hat geschrieben:

Code: Alles auswählen

gcc -o datei datei.c 'pkg-config gtk+-2.0 --cflags --libs'
bei mir wie gesagt funktioniert es nicht.
Warum nicht?

Re: header bindet header ein

Verfasst: Di Apr 02, 2013 2:20 pm
von nufan
Sportsfreund hat geschrieben:Prinzipiell gibt es eine Zeit- und Nervenschonendere Methode, leider hat es bei mir nicht funktionert. Aber das ist dann ein anderes Thema: So soll es gehen:

Code: Alles auswählen

gcc -o datei datei.c 'pkg-config gtk+-2.0 --cflags --libs'
bei mir wie gesagt funktioniert es nicht.
Versuchs mal mit Backticks statt Anführungszeichen, also:

Code: Alles auswählen

gcc -o datei datei.c `pkg-config gtk+-2.0 --cflags --libs`

Re: header bindet header ein

Verfasst: Di Apr 02, 2013 2:47 pm
von Xin
Hehehe, jetz' seh' ich's auch <stirnklatsch>

Re: header bindet header ein

Verfasst: Di Apr 02, 2013 10:42 pm
von Sportsfreund
gcc -o datei datei.c `pkg-config gtk+-2.0 --cflags --libs`
Stimmt, bei mir auch :D

Danke!