Anzeige:
Ergebnis 1 bis 8 von 8

Thema: [C] Wie unter Win Kompilieren? Header falsch?

  1. #1
    Registrierter Benutzer
    Registriert seit
    06.11.2009
    Ort
    Berlin
    Beiträge
    20

    Question [C] Wie unter Win Kompilieren? Header falsch?

    Hallo,
    ich hab bisher C nur unter Unix/Linux kompiliert.
    Hab jetzt nen Projekt mit gtk+ realisiert und wollte das unter Windows kompilieren, was mich vor einige Probleme stellte.

    Als Kompiler hab ich jetzt MinGW genommen.

    Wenn ich das Projekt (siehe Anhang) kompilieren will, erhalte ich nicht die gewünschte Funktionalität:
    Code:
    gcc SSP_main.c -o SSP.exe `pkg-config --cflags --libs gtk+-2.0 gmodule-2.0`
    Dies kompiliert zwar, aber beim Aufruf der EXE erhalte ich die Oberfläche und ne Konsole mit der Nachricht:
    (SSP.exe:2240): Gtk-WARNING **: Could not find signal handler 'on_button1_clicked'
    Wenn ich die Funktionalität der random.h haben will, dann bekomme ich beim kompilieren die Warnung der "Impliziten Definition der Funktion", deswegen hab ich das erstmal auskommentiert.

    Wenn ich erst die Objektdateien erzeuge und diese dann mittels
    Code:
    gcc `pkg-config --cflags --libs gtk+-2.0 gmodule-2.0` SSP_main.o SSP_callback.o -o SSP.exe
    linken will, dann bekomme ich "undefined reference to '$gtk_FUNKTION'.

    Sind meine Header falsch? Sind meine ersten ...
    Oder liegt der Fehler beim Linken?

    Danke für eure Hilfe.
    Geändert von crocodilechris (18-10-2010 um 23:48 Uhr)

  2. #2
    Registrierter Benutzer
    Registriert seit
    06.11.2009
    Ort
    Berlin
    Beiträge
    20
    Kann mir keiner helfen, oder habe ich Etwas falsch gemacht beim Posten?
    Hätte ich die Quellen vlt in ner Codebox posten sollen, anstatt nen Archiv zu packen?

    Ich komm beim besten Willen nicht dahinter, warum das nicht kompilieren will.

    pkg-config liefert unter MinGW:
    Chris@Terrarium_lap /d/Studium/GUI Sammlung/C/Schere_Stein_Papier
    $ pkg-config --cflags gtk+-2.0
    -mms-bitfields -Ic:/opt/gtk/include/gtk-2.0 -Ic:/opt/gtk/lib/gtk-2.0/include -Ic:/opt/gtk/include/atk-1.0 -Ic:/opt/gtk/include/cairo -Ic:/opt/gtk/include/pango-1.0 -Ic:/opt/gtk/include/glib-2.0 -Ic:/opt/gtk/lib/glib-2.0/include -Ic:/opt/gtk/include -Ic:/opt/gtk/include/freetype2 -Ic:/opt/gtk/include/libpng14

    Chris@Terrarium_lap /d/Studium/GUI Sammlung/C/Schere_Stein_Papier
    $ pkg-config --cflags gmodule-2.0
    -mms-bitfields -Ic:/opt/gtk/include/glib-2.0 -Ic:/opt/gtk/lib/glib-2.0/include


    Chris@Terrarium_lap /d/Studium/GUI Sammlung/C/Schere_Stein_Papier
    $ pkg-config --libs gtk+-2.0
    -Lc:/opt/gtk/lib -lgtk-win32-2.0 -lgdk-win32-2.0 -latk-1.0 -lgio-2.0 -lgdk_pixbuf-2.0 -lpangowin32-1.0 -lgdi32 -lpangocairo-1.0 -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl

    Chris@Terrarium_lap /d/Studium/GUI Sammlung/C/Schere_Stein_Papier
    $ pkg-config --libs gmodule-2.0
    -Lc:/opt/gtk/lib -lgmodule-2.0 -lglib-2.0 -lintl
    Die Daten bei den cflags sind richtig und vorhanden, ich versteh nicht, warum die Funktionen nicht gefunden werden.
    Hab es sogar schon mit
    Code:
    $ gcc `pkg-config --cflags gtk+-2.0 gmodule-2.0 | sed -e 's/Ic:/I\/c/g'`
    versucht, weil unter MinGW die Pfade nicht c:/opt sondern /c/opt sind.
    Geändert von crocodilechris (15-10-2010 um 14:59 Uhr) Grund: Ausgabe von $ pkg-config --libs gmodule-2.0 hinzugefügt

  3. #3
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Ist die unter Win verwendete GTK Version die gleiche wie beim bisher verwendeten Linux Projekt?
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  4. #4
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Ich meine mal irgendwie irgendwo irgendwann gelesen zu haben, daß es Probleme mit libglade unter Windows gibt. Vielleicht hilft eine Recherche in diese Richtung weiter.

    (Sorry für den schwammigen Beitrag, ich selber verwende kein libglade.)

  5. #5
    Registrierter Benutzer
    Registriert seit
    06.11.2009
    Ort
    Berlin
    Beiträge
    20
    Zitat Zitat von undefined Beitrag anzeigen
    Ist die unter Win verwendete GTK Version die gleiche wie beim bisher verwendeten Linux Projekt?
    Linux: 2.16
    Windows: 2.20

    @sommerfee
    besser schwammig, als garkeine Reaktion. Ich werd mal in diese Richtung recherchieren.

  6. #6
    Registrierter Benutzer Avatar von sommerfee
    Registriert seit
    02.07.2006
    Beiträge
    1.603
    Bekommst du eigentlich GTK-Quelltexte übersetzt, die kein (lib)glade verwenden, also z.B.
    Code:
    #include <gtk/gtk.h>
    
    int main( int argc, char *argv[])
    {
      gtk_init( &argc, &argv );
      gtk_widget_show( gtk_window_new( GTK_WINDOW_TOPLEVEL ) );
      gtk_main();
      return 0;
    }
    Geändert von sommerfee (15-10-2010 um 18:57 Uhr)

  7. #7
    Registrierter Benutzer
    Registriert seit
    06.11.2009
    Ort
    Berlin
    Beiträge
    20
    Das Funktioniert.
    Dann hab ich auchnoch versucht meine GUI zu kompilieren: das Funktioniert auch.
    Code:
    /* SSP_main.c */
    #define GLADE_FILE "SSP.glade"
    
    #include <gtk/gtk.h>
    
    int main( int argc, char ** argv ) {
        GtkBuilder      *builder;
        GError          *error = NULL;
        GtkWidget     *window;
            
        
        /* init Gtk */
        gtk_init( &argc, &argv );
        
        /* Create new GtkBuilder object */
        builder = gtk_builder_new();
        /* Load UI from file. If error occurs, report it and quit application. */
        if ( ! gtk_builder_add_from_file( builder, GLADE_FILE, &error ) ) {
            g_warning( "%s", error->message );
            g_free( error );
            return( 1 );
        }
        
        /* Get main window pointer from UI */
        window = GTK_WIDGET( gtk_builder_get_object( builder, "window1" ) );
    
        /* Connect signals */
        gtk_builder_connect_signals( builder, NULL );
        
        /* Signal connect example
        g_signal_connect( G_OBJECT( button1 ), "clicked", G_CALLBACK(on_button1_clicked), radio_list);
        */
            
        /* Destroy builder, since we don't need it anymore */
        g_object_unref( G_OBJECT( builder ) );
        
        /* Show window. All other widgets are automatically shown by GtkBuilder */
        gtk_widget_show( window );
        
        /* Start main loop */
        gtk_main();
            
        return( 0 );
    }
    Ich werde dann jetzt mal versuchen das Problem Schritt-für-Schritt zu reproduzieren.
    Mir ist auch gerade aufgefallen, dass ich meine callbacks nirgendwo inkludiere...

  8. #8
    Registrierter Benutzer
    Registriert seit
    06.11.2009
    Ort
    Berlin
    Beiträge
    20
    So, hab das Problem gelöst.
    Konnte es aber leider nicht vollständig reproduzieren.

    Bei den Callbacks musste ich beim kompilieren die Libs übergeben damit diese korrekt übersetzt wurden. Zusätzlich habe ich das static entfernt und nen Header mit den Forward deklarationen erstellt und diese als extern deklariert, da es mit static später Probleme gab, als ich die random.h hinzugefügt habe.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •