Fehlermeldung in Codeblocks bzgl. GTK+ "Hello World" Projekt

  • Hallo @ all,

    ich habe im Code blocks ein GTK+ 3.0 Projekt erstellt und vorher die GTK 3 Library installiert ( libgtk-3-dev ). Auch die Einstellungen für Compiler-> other compiler options (`pkg-config gtk+-3.0 --cflags`) und Linker -> other Linker options (`pkg-config gtk+-3.0 --libs`-export-dynamic ) gemacht. Trotzdem kriege ich die Fehlermeldung :

    -------------- Build: Debug in GTK (compiler: GNU GCC Compiler)---------------

    gcc -Wall -export-dynamic -g '/usr/bin/pkg-config gtk+-3.0 --cflags’ 'usr/bin/pkg-config gtk+-3.0 --cflags' -c /home/pi/Desktop/C-Programming/Hlech65730/GTK/main.c -o obj/Debug/main.o

    /usr/bin/ld: /usr/lib/gcc/i686-linux-gnu/8/../../../i386-linux-gnu/Scrt1.o: in function `_start':

    (.text+0x28): undefined reference to `main'

    collect2: error: ld returned 1 exit status

    Process terminated with status 1 (0 minute(s), 0 second(s))

    2 error(s), 0 warning(s) (0 minute(s), 0 second(s))

    hat da irgendwer Erfahrung ?

    Danke !

  • Fehlermeldung in Codeblocks bzgl. GTK+ "Hello World" Projekt? Schau mal ob du hier fündig wirst!

  • Hallo Deets,

    hat etwas gedauert, sorry ! Ich hoffe, ich habe den Code so richtig plaziert !

    Es gibt noch eine andere Version aus dem Linux Forum, die Fehlermeldung ist aber die gleiche.

    Irgendwas stimmt da mit der Anbindung der Library an den Compiler nicht, denke ich. die main loop scheint nicht definiert zu sein. Gruß, Hlech65730

  • Hallo Deets,

    mir ist da noch was aufgefallen. Im Code wird gtk.h aus dem Verzeichnis /gtk inkludiert. Mit sudo find -name gtk.h findet er nichts und das Verzeichnis /gtk kann ich auch nicht finden. Das scheint beim Build aber keine Rolle zu spielen. Ich habe nur die libgtk-3-dev installiert sonst nichts weiter, vielleicht fehlt das was ? Eigentlich müßte die Einbindung der Lib ja alle Symbole abdecken, aber das scheint hier nicht der Fall zu sein. Ich grabe mal weiter, Gruß, Hlech65730

  • ... Tschuldigung ! Steht unter /usr/include/gtk-3.0/gtk/ ! Find sucht nur im aktuellen Verzeichnis, oder ? Ausserdem bezieht sich die Fehlermeldung ja gar nicht auf die gtk Lib sondern auf den GCC :

    /usr/bin/ld: /usr/lib/gcc/i686-linux-gnu/8/../../../i386-linux-gnu/Scrt1.o: in function `_start':

    (.text+0x28): undefined reference to `main'

    also klappt der Einsprung in die main Funktion nicht. Mal sehen, ob ich da in der C++ Community weiterkomme.

    Edited once, last by Hlech65730 (August 3, 2020 at 8:16 PM).

  • find sucht in dem Verzeichnis das du angibst.

    Was mir jetzt erst auffällt: deine CPU Architektur ist falsch. Das muss arm sein. Du hast aber dort i686 stehen. Da ist was schief gelaufen.

  • Ok, sorry ! Also das ist so, ich habe das nicht nur auf einem Raspberry kompiliert, sondern auch auf einem Raspbian Buster unter VMware, also auf einem PC emuliert. Das war die Fehlermeldung dort. Die Meldung auf einem Raspberry sieht dann so aus :

    -------------- Build: Debug in GTK (compiler: GNU GCC Compiler)---------------

    gcc -Wall -g '/usr/bin/pkg-config gtk+-3.0 --cflags’ -export-dynamic -c /home/pi/Desktop/C-Programming/Hlech65730/GTK/main.c -o obj/Debug/main.o

    /usr/lib/gcc/arm-linux-gnueabihf/6/../../../arm-linux-gnueabihf/crt1.o: In function `_start':

    (.text+0x34): undefined reference to `main'

    collect2: error: ld returned 1 exit status

    Process terminated with status 1 (0 minute(s), 2 second(s))

    2 error(s), 0 warning(s) (0 minute(s), 2 second(s))

    bezieht sich auf /usr/lib/gcc/arm-linux-gnueabihf/6/... da gibt es nicht mehr so viele Unterverzeichnisse und crt1.o habe ich auch nicht gefunden.

    Die Fehlermeldungen sind sich aber verdammt ähnlich, also ich schätze, daß hat was mit dem GCC zu tun, oder mit meinen evtl. falschen Eintellungen des Codeblocks. Ich habe auch mal ein anderes "Hallo World" probiert , daß sieht so aus :

    also da immer die gleichen Fehlermeldungen kommen, kann's am Code wohl nicht liegen. Danke schon mal !

  • Hallo Deets, ja das geht ! Codeblocks bietet auch ein "Hello World" als "Console Application" an. Mein ( etwas modifizierter Code ) sieht dann so aus :

    das funktioniert. Ich habe auch schon die bcm2835-1.6 mit eingebunden und ein GPIO gesetzt und blinken lassen, geht auch. Ich versuche mal im Codeblocks Forum und bei GCC Foren ( wenn´s die gibt ) weiter zu kommen.

    Danke übrigens für das Interesse !

    Gruß, Hlech65730

    Edited once, last by Hlech65730 (August 7, 2020 at 1:25 PM).

  • Ich vermute mal codeblocks hier als Ursache. Ich würde dir raten einfach mit cmake zu arbeiten. Und die IDE weniger “Magie” machen zu lassen.

  • Hlech65730: In Deinem ersten gezeigten Quelltext hast Du einfach keine `main()`-Funktion, die *muss* es aber geben, denn das ist bei C der Einstiegspunkt ins Programm.

    Im Beitrag #8 hast Du dann ein Codebeispiel mit einer `main()`-Funktion, da sollte die Fehlermeldung nicht mehr kommen. Dafür kommt da ziemlich sicher eine andere, denn das include ist mit an Sicherheit grenzender Wahrscheinlichkeit falsch.

    Bei dem Konsolenbeispiel sollte man vielleicht anmerken, dass das unsicher ist weil `scanf()` nicht sicherstellt, dass nicht mehr Daten eingegeben werden als in das Zeichen-Array passen. Damit kann der Benutzer das Programm sehr leicht zum Absturz bringen.

    Ausserdem liest `scanf()` mit dem "%s" nur bis zum ersten Leerzeichen/Whitespace. Das heisst wenn jemand da als Namen Anna Maria eingibt, wird nur Anna in die Variable eingelesen und Maria vorerst ignoriert. Führende Leerzeichen werden auch überlesen. Was vielleicht in diesem Fall sinnvoll und gewünscht ist, sollte man aber wissen.

    “It is well known that a vital ingredient of success is not knowing that what you're attempting can't be done.” — Terry Pratchett, Equal Rites

  • Was ich an dem Codebeispiel aus Beitrag #8 merkwürdig finde, ist die Funktion

    Code
    on_window_main_destroy.

    Diese Funktion wird im Quelltext gar nicht aufgerufen. Da hätte ich gerne mal den kompletten Compiler-Aufruf gesehen, mit dem ein ausführbares Programm erstellt werden soll. Der Ansicht von __blackjack__ betreff dem Include-Statement stimme ich zu: das sieht ganz komisch aus.

  • peuler Bei der `on_main_window_destroy()` kann es sein, dass `gtk_builder_connect_signals()` dafür sorgt, dass die Funktion als Rückruffunktion registriert/verbunden wir. Dazu müsste man die *.glade-Datei kennen.

    “It is well known that a vital ingredient of success is not knowing that what you're attempting can't be done.” — Terry Pratchett, Equal Rites

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!