Compiler-Probleme und GTK



  • Ich habe ein generelles Problem mit dem Compilieren von Programmen, die GTK 2.0 verwenden.
    Meine Konfiguration: Suse Linux 9.1 und KDE als Desktop :und letzteres ist vermutlich die Ursache meines Problems.
    Denn ich nehme an mit Gnome als Desktop hätte ich das Problem nicht.

    Ich habe zu Testzwecken ein kleines Programm geschrieben, welches GTK verwendet und lediglich ein Fenster öffnet.
    TEST.C
    #include <gtk/gtk.h>

    int
    main (int argc, char *argv[])
    {
    GtkWidget *window1;

    gtk_init (&argc, &argv);

    window1 = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_widget_show (window1);

    gtk_main ();
    return 0;
    }

    Wenn ich dieses nun mittels gcc übersetzen lassen will mit dem allseits empfohlenen Aufruf:
    gcc test.c 'gtk-config --cflags --libs' -o test
    erhalte ich hunderte von Fehlermeldungen, die verursacht werden, weil gcc Typdefinitionen von GTK nicht findet.
    Denn u.a. kommen auch Fehlermeldungen, die besagen, dass Header nicht gefunden werden: z.B. gdk/gdk.h Datei oder Verzeichnis nicht gefunden.
    Wenn ich dagegen gcc aufrufe und die Pfade der einzelnen Header direkt angebe, erhalte ich keinen einzigen Compilerfehler:
    gcc -g -Wall test.c -I/opt/gnome/include/gtk-2.0 -I/opt/gnome/lib/gtk-2.0/include -I/opt/gnome/include/atk-1.0 -I/opt/gnome/include/pango-1.0 -I/usr/X11R6/include -I/usr/include/freetype2 -I/usr/include/freetype2/config -I/opt/gnome/include/glib-2.0 -I/opt/gnome/lib/glib-2.0/include -L/opt/gnome/lib -o test

    Mein Problem ist also, dass diese Header alle woanders stehen als sie sollten. Deshalb meine Vermutung, dass es daran liegt,
    dass ich KDE verwende und nicht GNOME. (alle stehen unter /opt/gnome/...)
    Ist das richtig ??

    Oder hat jemand noch eine andere Idee ?

    Denn mein nächstes Problem ist, dass gcc nicht die zugehörigen Libraries findet und ich nicht weiss, wie man die Libraries zusammensucht (mit den Headern war das ja vergleichsweise einfach, da man eine *.h-Datei einfach mit einem Editor lesen kann).

    Also: wie kann ich mein Linux-/GTK-/System so umstellen, dass auch ich einfach den erstgenannten gcc-Aufruf (also den mittels config') verwenden kann ?



  • Poste mal die Fehlermeldungen



  • wie ich bereits schrieb: es sind hunderte.
    Hier sind die ersten:
    gcc: gtk-config --cflags --libs: Datei oder Verzeichnis nicht gefunden
    In file included from test.c:1:
    /usr/include/gtk/gtk.h:31:21: gdk/gdk.h: Datei oder Verzeichnis nicht gefunden
    In file included from /usr/include/gtk/gtk.h:32,
    from test.c:1:
    /usr/include/gtk/gtkaccelgroup.h:31:21: gdk/gdk.h: Datei oder Verzeichnis nicht gefunden
    In file included from /usr/include/gtk/gtkaccelgroup.h:32,
    from /usr/include/gtk/gtk.h:32,
    from test.c:1:
    /usr/include/gtk/gtkenums.h:30:25: glib-object.h: Datei oder Verzeichnis nicht gefunden
    In file included from /usr/include/gtk/gtkaccelgroup.h:32,
    from /usr/include/gtk/gtk.h:32,
    from test.c:1:
    /usr/include/gtk/gtkenums.h:295: error: G\_SIGNAL\_RUN_FIRST' undeclared here (not in a function) /usr/include/gtk/gtkenums.h:295: error: enumerator value forGTK_RUN_FIRST' not integer constant
    /usr/include/gtk/gtkenums.h:296: error: G\_SIGNAL\_RUN_LAST' undeclared here (not in a function) /usr/include/gtk/gtkenums.h:296: error: enumerator value forGTK_RUN_LAST' not integer constant
    /usr/include/gtk/gtkenums.h:298: error: G\_SIGNAL\_NO_RECURSE' undeclared here (not in a function) /usr/include/gtk/gtkenums.h:298: error: enumerator value forGTK_RUN_NO_RECURSE' not integer constant
    /usr/include/gtk/gtkenums.h:299: error: G\_SIGNAL\_ACTION' undeclared here (not in a function) /usr/include/gtk/gtkenums.h:299: error: enumerator value forGTK_RUN_ACTION' not integer constant
    /usr/include/gtk/gtkenums.h:301: error: G\_SIGNAL\_NO_HOOKS' undeclared here (not in a function) /usr/include/gtk/gtkenums.h:301: error: enumerator value forGTK_RUN_NO_HOOKS' not integer constant
    In file included from /usr/include/gtk/gtk.h:32,
    from test.c:1:
    /usr/include/gtk/gtkaccelgroup.h:47: error: syntax error before "typedef"
    /usr/include/gtk/gtkaccelgroup.h:60: error: parse error before '' token
    /usr/include/gtk/gtkaccelgroup.h:61: error: parse error before "GObject"
    /usr/include/gtk/gtkaccelgroup.h:63: error: gboolean' declared as function returning a function /usr/include/gtk/gtkaccelgroup.h:66: error: parse error before "GClosure" /usr/include/gtk/gtkaccelgroup.h:67: error:GtkAccelGroupFindFunc' declared as function returning a function
    /usr/include/gtk/gtkaccelgroup.h:71: error: parse error before "GObject"
    /usr/include/gtk/gtkaccelgroup.h:73: error: parse error before "modifier_mask"
    /usr/include/gtk/gtkaccelgroup.h:74: error: parse error before '
    ' token
    /usr/include/gtk/gtkaccelgroup.h:75: error: parse error before "n_accels"
    /usr/include/gtk/gtkaccelgroup.h:77: error: parse error before '}' token
    /usr/include/gtk/gtkaccelgroup.h:81: error: parse error before "GObjectClass"
    /usr/include/gtk/gtkaccelgroup.h:84: error: parse error before "guint"
    /usr/include/gtk/gtkaccelgroup.h:93: error: parse error before '}' token
    /usr/include/gtk/gtkaccelgroup.h:97: error: parse error before "guint"
    /usr/include/gtk/gtkaccelgroup.h:99: error: parse error before "accel_flags"
    /usr/include/gtk/gtkaccelgroup.h:104: error: parse error before "gtk_accel_group_get_type"
    /usr/include/gtk/gtkaccelgroup.h:109: error: parse error before "guint"
    /usr/include/gtk/gtkaccelgroup.h:114: error: parse error before '' token
    /usr/include/gtk/gtkaccelgroup.h:117: error: parse error before "GClosure"
    /usr/include/gtk/gtkaccelgroup.h:117: error: gtk\_accel\_group_disconnect' declared as function returning a function /usr/include/gtk/gtkaccelgroup.h:119: error: parse error before "guint" /usr/include/gtk/gtkaccelgroup.h:120: error:gtk_accel_group_disconnect_key' declared as function returning a function
    /usr/include/gtk/gtkaccelgroup.h:125: error: parse error before "GObject"
    /usr/include/gtk/gtkaccelgroup.h:127: error: parse error before "GObject"
    /usr/include/gtk/gtkaccelgroup.h:128: error: parse error before '
    ' token
    /usr/include/gtk/gtkaccelgroup.h:130: error: gtk\_accel\_groups_activate' declared as function returning a function /usr/include/gtk/gtkaccelgroup.h:131: error: parse error before '*' token /usr/include/gtk/gtkaccelgroup.h:131: error: parse error before '*' token /usr/include/gtk/gtkaccelgroup.h:134: error: parse error before "gpointer" /usr/include/gtk/gtkaccelgroup.h:135: error: parse error before '*' token /usr/include/gtk/gtkaccelgroup.h:139: error: parse error before "keyval" /usr/include/gtk/gtkaccelgroup.h:141: error: parse error before '*' token /usr/include/gtk/gtkaccelgroup.h:144: error: parse error before '*' token /usr/include/gtk/gtkaccelgroup.h:144: error: parse error before "accelerator_key" /usr/include/gtk/gtkaccelgroup.h:146: error: parse error before "default\_mod\_mask" /usr/include/gtk/gtkaccelgroup.h:147: error: parse error before "gtk\_accelerator\_get\_default\_mod_mask" /usr/include/gtk/gtkaccelgroup.h:152: error: parse error before "guint" /usr/include/gtk/gtkaccelgroup.h:157: error: parse error before "GQuark" /usr/include/gtk/gtkaccelgroup.h:161: error: fieldkey' has incomplete type
    /usr/include/gtk/gtkaccelgroup.h:162: error: parse error before "GClosure"
    In file included from /usr/include/gtk/gtkaccellabel.h:34,
    from /usr/include/gtk/gtk.h:33,
    from test.c:1:
    /usr/include/gtk/gtklabel.h:30:21: gdk/gdk.h: Datei oder Verzeichnis nicht gefunden
    In file included from /usr/include/gtk/gtklabel.h:31,
    from /usr/include/gtk/gtkaccellabel.h:34,
    from /usr/include/gtk/gtk.h:33,
    from test.c:1:
    /usr/include/gtk/gtkmisc.h:31:21: gdk/gdk.h: Datei oder Verzeichnis nicht gefunden
    In file included from /usr/include/gtk/gtkmisc.h:32,
    from /usr/include/gtk/gtklabel.h:31,
    from /usr/include/gtk/gtkaccellabel.h:34,
    from /usr/include/gtk/gtk.h:33,
    from test.c:1:
    /usr/include/gtk/gtkwidget.h:30:21: gdk/gdk.h: Datei oder Verzeichnis nicht gefunden
    In file included from /usr/include/gtk/gtkobject.h:32,
    from /usr/include/gtk/gtkwidget.h:32,
    from /usr/include/gtk/gtkmisc.h:32,
    from /usr/include/gtk/gtklabel.h:31,
    from /usr/include/gtk/gtkaccellabel.h:34,
    from /usr/include/gtk/gtk.h:33,
    from test.c:1:
    /usr/include/gtk/gtktypeutils.h:31:25: glib-object.h: Datei oder Verzeichnis nicht gefunden
    In file included from /usr/include/gtk/gtkobject.h:32,
    from /usr/include/gtk/gtkwidget.h:32,
    from /usr/include/gtk/gtkmisc.h:32,
    from /usr/include/gtk/gtklabel.h:31,
    from /usr/include/gtk/gtkaccellabel.h:34,
    from /usr/include/gtk/gtk.h:33,
    from test.c:1:
    /usr/include/gtk/gtktypeutils.h:34: error: parse error before "G_BEGIN_DECLS"
    /usr/include/gtk/gtktypeutils.h:62: error: syntax error before "typedef"
    /usr/include/gtk/gtktypeutils.h:89: error: parse error before "GtkType"
    /usr/include/gtk/gtktypeutils.h:93: error: parse error before "GtkTypeObject"
    /usr/include/gtk/gtktypeutils.h:94: error: parse error before "GtkTypeClass"
    /usr/include/gtk/gtktypeutils.h:95: error: parse error before "GtkClassInitFunc"
    /usr/include/gtk/gtktypeutils.h:96: error: parse error before "GtkObjectInitFunc"
    In file included from /usr/include/gtk/gtktypeutils.h:104,
    from /usr/include/gtk/gtkobject.h:32,
    from /usr/include/gtk/gtkwidget.h:32,
    from /usr/include/gtk/gtkmisc.h:32,
    from /usr/include/gtk/gtklabel.h:31,
    from /usr/include/gtk/gtkaccellabel.h:34,
    from /usr/include/gtk/gtk.h:33,
    from test.c:1:
    /usr/include/gtk/gtktypebuiltins.h:7:25: glib-object.h: Datei oder Verzeichnis nicht gefunden
    In file included from /usr/include/gtk/gtktypeutils.h:104,
    from /usr/include/gtk/gtkobject.h:32,
    from /usr/include/gtk/gtkwidget.h:32,
    from /usr/include/gtk/gtkmisc.h:32,
    from /usr/include/gtk/gtklabel.h:31,
    from /usr/include/gtk/gtkaccellabel.h:34,
    from /usr/include/gtk/gtk.h:33,
    from test.c:1:
    /usr/include/gtk/gtktypebuiltins.h:9: error: parse error before "G_BEGIN_DECLS"
    /usr/include/gtk/gtktypebuiltins.h:18: error: parse error before "gtk_calendar_display_options_get_type"
    /usr/include/gtk/gtktypebuiltins.h:23: error: parse error before "gtk_cell_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:26: error: parse error before "gtk_clist_drag_pos_get_type"
    /usr/include/gtk/gtktypebuiltins.h:29: error: parse error before "gtk_button_action_get_type"
    /usr/include/gtk/gtktypebuiltins.h:34: error: parse error before "gtk_ctree_pos_get_type"
    /usr/include/gtk/gtktypebuiltins.h:37: error: parse error before "gtk_ctree_line_style_get_type"
    /usr/include/gtk/gtktypebuiltins.h:40: error: parse error before "gtk_ctree_expander_style_get_type"
    /usr/include/gtk/gtktypebuiltins.h:43: error: parse error before "gtk_ctree_expansion_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:48: error: parse error before "gtk_cell_renderer_state_get_type"
    /usr/include/gtk/gtktypebuiltins.h:51: error: parse error before "gtk_cell_renderer_mode_get_type"
    /usr/include/gtk/gtktypebuiltins.h:56: error: parse error before "gtk_debug_flag_get_type"
    /usr/include/gtk/gtktypebuiltins.h:61: error: parse error before "gtk_dialog_flags_get_type"
    /usr/include/gtk/gtktypebuiltins.h:64: error: parse error before "gtk_response_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:69: error: parse error before "gtk_dest_defaults_get_type"
    /usr/include/gtk/gtktypebuiltins.h:72: error: parse error before "gtk_target_flags_get_type"
    /usr/include/gtk/gtktypebuiltins.h:77: error: parse error before "gtk_anchor_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:80: error: parse error before "gtk_arrow_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:83: error: parse error before "gtk_attach_options_get_type"
    /usr/include/gtk/gtktypebuiltins.h:86: error: parse error before "gtk_button_box_style_get_type"
    /usr/include/gtk/gtktypebuiltins.h:89: error: parse error before "gtk_curve_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:92: error: parse error before "gtk_delete_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:95: error: parse error before "gtk_direction_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:98: error: parse error before "gtk_expander_style_get_type"
    /usr/include/gtk/gtktypebuiltins.h:101: error: parse error before "gtk_icon_size_get_type"
    /usr/include/gtk/gtktypebuiltins.h:104: error: parse error before "gtk_side_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:107: error: parse error before "gtk_text_direction_get_type"
    /usr/include/gtk/gtktypebuiltins.h:110: error: parse error before "gtk_justification_get_type"
    /usr/include/gtk/gtktypebuiltins.h:113: error: parse error before "gtk_match_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:116: error: parse error before "gtk_menu_direction_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:119: error: parse error before "gtk_metric_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:122: error: parse error before "gtk_movement_step_get_type"
    /usr/include/gtk/gtktypebuiltins.h:125: error: parse error before "gtk_orientation_get_type"
    /usr/include/gtk/gtktypebuiltins.h:128: error: parse error before "gtk_corner_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:131: error: parse error before "gtk_pack_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:134: error: parse error before "gtk_path_priority_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:137: error: parse error before "gtk_path_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:140: error: parse error before "gtk_policy_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:143: error: parse error before "gtk_position_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:146: error: parse error before "gtk_preview_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:149: error: parse error before "gtk_relief_style_get_type"
    /usr/include/gtk/gtktypebuiltins.h:152: error: parse error before "gtk_resize_mode_get_type"
    /usr/include/gtk/gtktypebuiltins.h:155: error: parse error before "gtk_signal_run_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:158: error: parse error before "gtk_scroll_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:161: error: parse error before "gtk_selection_mode_get_type"
    /usr/include/gtk/gtktypebuiltins.h:164: error: parse error before "gtk_shadow_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:167: error: parse error before "gtk_state_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:170: error: parse error before "gtk_submenu_direction_get_type"
    /usr/include/gtk/gtktypebuiltins.h:173: error: parse error before "gtk_submenu_placement_get_type"
    /usr/include/gtk/gtktypebuiltins.h:176: error: parse error before "gtk_toolbar_style_get_type"
    /usr/include/gtk/gtktypebuiltins.h:179: error: parse error before "gtk_update_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:182: error: parse error before "gtk_visibility_get_type"
    /usr/include/gtk/gtktypebuiltins.h:185: error: parse error before "gtk_window_position_get_type"
    /usr/include/gtk/gtktypebuiltins.h:188: error: parse error before "gtk_window_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:191: error: parse error before "gtk_wrap_mode_get_type"
    /usr/include/gtk/gtktypebuiltins.h:194: error: parse error before "gtk_sort_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:197: error: parse error before "gtk_im_preedit_style_get_type"
    /usr/include/gtk/gtktypebuiltins.h:200: error: parse error before "gtk_im_status_style_get_type"
    /usr/include/gtk/gtktypebuiltins.h:205: error: parse error before "gtk_image_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:210: error: parse error before "gtk_message_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:213: error: parse error before "gtk_buttons_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:218: error: parse error before "gtk_notebook_tab_get_type"
    /usr/include/gtk/gtktypebuiltins.h:223: error: parse error before "gtk_object_flags_get_type"
    /usr/include/gtk/gtktypebuiltins.h:226: error: parse error before "gtk_arg_flags_get_type"
    /usr/include/gtk/gtktypebuiltins.h:231: error: parse error before "gtk_private_flags_get_type"
    /usr/include/gtk/gtktypebuiltins.h:236: error: parse error before "gtk_progress_bar_style_get_type"
    /usr/include/gtk/gtktypebuiltins.h:239: error: parse error before "gtk_progress_bar_orientation_get_type"
    /usr/include/gtk/gtktypebuiltins.h:244: error: parse error before "gtk_rc_flags_get_type"
    /usr/include/gtk/gtktypebuiltins.h:247: error: parse error before "gtk_rc_token_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:252: error: parse error before "gtk_size_group_mode_get_type"
    /usr/include/gtk/gtktypebuiltins.h:257: error: parse error before "gtk_spin_button_update_policy_get_type"
    /usr/include/gtk/gtktypebuiltins.h:260: error: parse error before "gtk_spin_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:265: error: parse error before "gtk_text_search_flags_get_type"
    /usr/include/gtk/gtktypebuiltins.h:270: error: parse error before "gtk_text_window_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:275: error: parse error before "gtk_toolbar_child_type_get_type"
    /usr/include/gtk/gtktypebuiltins.h:278: error: parse error before "gtk_toolbar_space_style_get_type"
    /usr/include/gtk/gtktypebuiltins.h:283: error: parse error before "gtk_tree_view_mode_get_type"



  • es muss nicht 'gtk-config --libs --cflags' heißen, sondern `gtk-config --libs --cflags` oder $(gtk-config --libs --cflags).

    Das bewirkt, dass die Ausgabe von gtk-config in die Kommandozeile eingefügt wird.



  • also : wenn ich die Angabe
    $(gtk-config --libs --cflags)
    verwende, klappt es. Im anderen Falle mit Hochkomma sind die Fehlermeldungen diegleichen wie oben beschrieben.

    ABER:
    wenn ich ein Compile über make an einem geringfügig grösseren Programm versuche, scheitere ich wiederum.

    Hier ist mein MAKEFILE:
    wdis.x: wdis.o lowlevel.o allgem.o datum.o
    gcc -o wdis.x wdis.o lowlevel.o allgem.o datum.o
    wdis.o: /home/peter/cpp/wdis/wdis.c /home/peter/callgg/lowlevel.h /home/peter/callgg/allgem.h /home/peter/callgg/datum.h
    gcc -c -Wall -g $(gtk-config --libs --cflags) /home/peter/cpp/wdis/wdis.c
    lowlevel.o: /home/peter/callgg/lowlevel.c
    gcc -c -Wall -g /home/peter/callgg/lowlevel.c
    allgem.o: /home/peter/callgg/allgem.c /home/peter/callgg/lowlevel.h /home/peter/callgg/datum.h
    gcc -c -Wall -g /home/peter/callgg/allgem.c
    datum.o: /home/peter/callgg/datum.c /home/peter/callgg/lowlevel.h
    gcc -c -Wall -g /home/peter/callgg/datum.c
    Nur der Hauptmodul wdis benötigt GTK+, die anderen drei nicht.
    Hier ist wiederum der Anfang der Fehlermeldungen:

    gcc -c -Wall -g /home/peter/cpp/wdis/wdis.c
    In file included from /home/peter/cpp/wdis/wdis.c:2:
    /usr/include/gtk/gtk.h:31:21: gdk/gdk.h: Datei oder Verzeichnis nicht gefunden
    In file included from /usr/include/gtk/gtk.h:32,
    from /home/peter/cpp/wdis/wdis.c:2:
    /usr/include/gtk/gtkaccelgroup.h:31:21: gdk/gdk.h: Datei oder Verzeichnis nicht gefunden
    In file included from /usr/include/gtk/gtkaccelgroup.h:32,
    from /usr/include/gtk/gtk.h:32,
    from /home/peter/cpp/wdis/wdis.c:2:
    /usr/include/gtk/gtkenums.h:30:25: glib-object.h: Datei oder Verzeichnis nicht gefunden
    In file included from /usr/include/gtk/gtkaccelgroup.h:32,
    from /usr/include/gtk/gtk.h:32,
    from /home/peter/cpp/wdis/wdis.c:2:
    /usr/include/gtk/gtkenums.h:295: error: `G_SIGNAL_RUN_FIRST' undeclared here (not in a function)
    ...
    ...



  • Du sollst ja auch keine Hochkommas nehmen, sondern Backticks ` und nicht '! (ASCII 0x60)

    Ansonsten liegt der Fehler daran, dass du beim normalen kompilieren immer die gtk-config --cflags mitgeben musst, da der Compiler sonst nicht weiß wo er die Includefiles suchen muss. Die --libs brauchst du nur beim linken.



  • jaa, das ist die Lösung: ein Backtick.
    damit klappt alles richtig und sämtliche Fragen haben sich erledigt.

    Ich kannte dieses Teil bisher nicht.


Anmelden zum Antworten