# GTK+ mit C Programmieren



## diabolus (18. Oktober 2010)

Mahlzeit!

Verkloppt mich nicht gleich wenn ich hier in dem Forum etwas falsch bin, aber ich war unentschlossen ob ich das jetzt in C/C++ rein klatsche oder hier. Hier war mir aber dann doch irgendwo sinnvoller.

Worum es geht. Ich habe einige Jahre auf dem Amiga mit C und MUI Programmiert. Auch komplexere Dinge wie CyberGL Anwendungen. Bin also da nicht zwingend der Anfänger. Nun hat es mich die Tage geritten und ich wolle mich mal auf Linux versuchen. Seit fast 2 Jahren habe ich ausschliesslich Linux auf dem Rechner, aber seit meinen aktiven Amiga Zeiten eigentlich nicht mehr wirklich mit C gearbeitet. Das will ich jetzt ändern. 

Also habe ich mir ein Tut gesucht was recht gut beschrieben ist. Dieses ist folgendes: 
http://wwwuser.gwdg.de/~kboehm/ebook/inhalt.html

Bis zu dem Punkt wo es um GTK+ geht kann ich auch alles nachvollziehen und benutzen. Doch bei GTK+ musste ich erst einmal heraus finden wie ich die include-pfade angebe und dennoch kann ich das im Tut angeführte Listibg 2101 nicht compilieren.

Ich benutze folgenden Befehl:


```
gcc -I /usr/include/gtk-2.0/ -I /usr/include/glib-2.0/ -I /usr/include/cairo -I /usr/include/pango-1.0 -I /usr/lib/glib-2.0/include/ -I /usr/lib/gtk-2.0/include -I /usr/include/atk-1.0 -O2 -fomit-frame-pointer -o a.out list2101.c
```

Das Ergebnis ist folgendes:


```
/tmp/ccnNggZE.o: In function `loeschen_funk':
list2101.c:(.text+0xb): undefined reference to `g_print'
/tmp/ccnNggZE.o: In function `main':
list2101.c:(.text+0x38): undefined reference to `gtk_init'
list2101.c:(.text+0x44): undefined reference to `gtk_window_new'
list2101.c:(.text+0x4b): undefined reference to `gtk_widget_get_type'
list2101.c:(.text+0x57): undefined reference to `g_type_check_instance_cast'
list2101.c:(.text+0x6f): undefined reference to `gtk_widget_set_usize'
list2101.c:(.text+0x74): undefined reference to `gtk_window_get_type'
list2101.c:(.text+0x80): undefined reference to `g_type_check_instance_cast'
list2101.c:(.text+0x90): undefined reference to `gtk_window_set_title'
list2101.c:(.text+0x95): undefined reference to `gtk_object_get_type'
list2101.c:(.text+0xa1): undefined reference to `g_type_check_instance_cast'
list2101.c:(.text+0xe1): undefined reference to `gtk_signal_connect_full'
list2101.c:(.text+0xe9): undefined reference to `gtk_widget_show'
list2101.c:(.text+0xee): undefined reference to `gtk_main'
list2101.c:(.text+0xfa): undefined reference to `g_print'
/tmp/ccnNggZE.o: In function `loeschen_funk':
list2101.c:(.text+0x13): undefined reference to `gtk_main_quit'
collect2: ld gab 1 als Ende-Status zurück
diabolus@horst ~/C $
```

Ich muss gestehen das ich damit im Moment etwas überfordert bin, vielleicht weil ich zu damaligen Zeiten immer mit StormC, also einem kompletten Entwicklungs-Kit gearbeitet habe, vielleicht habe ich auch nur den Faden etwas verloren.

Aber wenn mir jemand helfen könnte wäre ich sehr dankbar.


----------



## deepthroat (19. Oktober 2010)

Hi.

Du hast vergessen die Bibliotheken zu linken.

Normalerweise kompiliert man erstmal den C Code zu Objektdateien und linkt dann alles mit dem Bibliotheken zusammen.

Die notwendigen Argumente (Include-Pfade, Library-Pfade etc.) können mit pkg-config ermittelt werden:

```
gcc $(pkg-config --cflags gtk+-2.0) -c -O2 -fomit-frame-pointer list2101.c
gcc -o list2101 list2101.o $(pkg-config --libs gtk+-2.0)
```
Weiterhin wäre es sinnvoll (wenn die Projekte größer werden und aus mehr als einer Datei bestehen) ein Buildsystem einzusetzen. Z.B. CMake, waf, scons oder auch die autotools.

Gruß


----------

