Linkerprobleme mit Code::Blocks und GTKmm
-
Hallo,
ich habe eine Frage zu GTKmm in Verbindung mit Code::Blocks:
Ich habe mir das Tutorial zu GTK+ und GTKmm aus der FAQ durchgelesen und GTK+ und GTKmm installiert. Wenn ich unter Code::Blocks das Template für GTK+ Anwendungen benutze, kann ich normale GTK+ Anwendungen auch kompilieren + linken.
Jetzt möchte ich aber GTKmm benutzen. Dazu habe ich mir unter Code::Blocks eine Konsolenanwendung erstellt (war das schon falsch?) und dann unter
Project->Build options->Directories->Compiler
alle Ordner für GTK+ und GTKmm hinzugefügt, so wie es im Tutorial beschrieben ist. Unter
Project->Build options->Directories->Linker
habe ich dann noch
C:\GTK\lib
hinzugefügt und schließlich unter
Project->Build options->Linker
alle zu linkenden Libraries ergänzt. Dabei gab es bei mir im Verzeichnis C:\GTK\lib die beiden Bibiotheken gdi32 und ws2_32 nicht. Deshalb habe ich unter den Linker-Directories auch noch C:\MingW\lib ergänzt und schließlich unter den zu linkenden Libraries
libgdi32.a und libws2_32.a
hinzugefügt, ich hoffe dass das nicht der Grund für die Fehler ist...
Wenn ich jetzt nämlich folgenden Beispiel-Code kompilieren möchte, hagelt es immer Linkerfehler:
#include <gtkmm.h> int main(int argc, char *argv[]) { Gtk::Main kit(argc, argv); Gtk::Window window; Gtk::Main::run(window); return 0; }
C:\Documents and Settings\Felix\My Documents\Projects\GTKTest\main.cpp:5: undefined reference to `Gtk::Main::Main(int&, char**&, bool)' C:\Documents and Settings\Felix\My Documents\Projects\GTKTest\main.cpp:6: undefined reference to `Gtk::Window::Window(Gtk::WindowType)' C:\Documents and Settings\Felix\My Documents\Projects\GTKTest\main.cpp:7: undefined reference to `Gtk::Main::run(Gtk::Window&)' C:\Documents and Settings\Felix\My Documents\Projects\GTKTest\main.cpp:8: undefined reference to `Gtk::Window::~Window()' C:\Documents and Settings\Felix\My Documents\Projects\GTKTest\main.cpp:8: undefined reference to `Gtk::Main::~Main()' C:\Documents and Settings\Felix\My Documents\Projects\GTKTest\main.cpp:8: undefined reference to `Gtk::Window::~Window()' C:\Documents and Settings\Felix\My Documents\Projects\GTKTest\main.cpp:8: undefined reference to `Gtk::Main::~Main()' :: === Build finished: 7 errors, 0 warnings ===
Jetzt meine Frage: Woher kommen diese Linkerfehler? Habe ich beim eintragen der Bibliotheken irgendetwas falsch gemacht?
Schonmal Danke im Voraus
Felix
P.S.: Screenshots meiner Code::Blocks Einstellungen gibt es hier:
http://img228.imageshack.us/img228/6286/compilerdirectoriestj1.jpg
http://img228.imageshack.us/img228/1426/linkerbibliothekenkk0.jpg
http://img228.imageshack.us/img228/6559/linkerbibliothekenkj8.jpg
-
Ich bin gerade auf eine Newsgroup gestoßen, in der mein Problem bei jemand anders aufgetreten ist. Sein "Lösung", die ich allerdings nicht ganz nachvollziehen kann, da ich mich mit den Kommandozeilencompilern praktisch überhaupt nicht auskenne ist:
under Windows the order of compiler and linker flags matters.
So it is important to do give the LDFLAGS after the source files:
$(GCC) $(CFLAGS) -o $(BIN) $(SRC) (GCC) $(CFLAGS) $(LDFLAGS) -o $(BIN) $(SRCLink: http://mail.gnome.org/archives/gnomemm-list/2005-May/msg00009.html
Wie kann ich das in Code::Blocks einstellen, bzw. was bedeutet das überhaupt?
Felix
EDIT: Unter dieser Adresse hat noch jemand das gleiche Problem, bei ihm liegt es anscheinend an der Compiler-Version...:
http://groups.google.de/group/be.comp.programming/browse_thread/thread/1b3509cb40751811/02a31b2336625648&rnum=1&hl=de#02a31b2336625648Ähnliches Problem auch noch einmal hier:
Hat irgendwer irgendeine Idee?
EDIT Final:
SO, ich habe mein bescheuertes Problem jetzt selbst gelöst. Allderdings sollte die FA evtl. mal upgedatet werden. DIe Lösung ist wie folgt:
Ich habe, wie in der FAQ stand
gtkmm-2.4.lib
gdkmm-2.4.lib
atkmm-1.6.lib
pangomm-1.4.lib
glibmm-2.4.lib
sigc-2.0.lib
gdi32.lib
libglademm-2.4.lib
z.lib
ws2_32.libgegen meine Anwendung linken lassen. Nach (mehr oder weniger) intensiven Recherchen habe ich aber festgestelle, dass auf der Seite, auf der man die Installationsdatei für GTKmm herunterladen kann steht:
Import libraries for mingw32 have the .dll.a extension. Import libraries for MSVC have the .lib extension.
Das war das einzige Problem, das ich hatte. Jetzt funktioniert alles... Das einzig Komische bleibt, dass die Bibliotheken von GTK+ anscheinend trotzdem .lib als Endung haben
Naja, vielleicht hat ja mal irgendwer irgendwann das gleiche Problem
Felix :xmas1: :xmas2:
-
Phoemuex schrieb:
Allderdings sollte die FA evtl. mal upgedatet werden. DIe Lösung ist wie folgt:
Ich habe, wie in der FAQ stand
gtkmm-2.4.lib
gdkmm-2.4.lib
atkmm-1.6.lib
pangomm-1.4.lib
glibmm-2.4.lib
sigc-2.0.lib
gdi32.lib
libglademm-2.4.lib
z.lib
ws2_32.libgegen meine Anwendung linken lassen. Nach (mehr oder weniger) intensiven Recherchen habe ich aber festgestelle, dass auf der Seite, auf der man die Installationsdatei für GTKmm herunterladen kann steht:
Import libraries for mingw32 have the .dll.a extension. Import libraries for MSVC have the .lib extension.
Yo, in der FAQ wird auch nur beschrieben, wie man gtkmm mit dem Visual Studio zum Laufen bringt... Ich wollte schon lange mal was zu gtkmm + MinGW schreiben, aber bisher fehlte mir immer die Zeit.
-
Dafür das du keine Zeit hast postest du aber ziemlich viel hier im C++ Forum...
-
Rop schrieb:
Dafür das du keine Zeit hast postest du aber ziemlich viel hier im C++ Forum...
Jo, deshalb hab ich auch keine Zeit^^
Abgesehen davon poste ich nicht sooo viel.