WxWidgets Libraries in *.exe einbinden
-
Update: OK ich habe grade geschaut - die Pfade werden von alleine schon gesetzt, jetzt weiß ich bloß nicht wie ich die Libraries verlinken soll (eine Variable Lib wid bei der Installation bei Systemvariablen eingetragen und ist auf das Verzeichnis LIB verlinkt) und wie ich kompliere... Ich glaube es fehlt nur das kompilieren.^^
**
Update 2:** Ich vergesse nun GTK - da bei dem User ein Runtime installiert sein muss, damit das jenige Program läuft, also versuche ich es mit WxWidgets._________________________________________________________________________
Ich versuche schon den zweiten Tag lang GTK+ mit dem GCC Compiler zum Laufen zu bringen. Also GCC läuft perfekt! Ich verwende ihn schon seit zwei Monaten ganz gut. Jetzt wollte ich erste Programme mit grafischen Oberflächen schreiben. Mit WinApi klappt das auch mehr oder weniger, jedoch schreibe ich auch für Linux Programme. Aber unter Windows bekomme ich GTK+ einfach nicht konfiguriert.
Das Problem liegt daran, dass ich keine Ahnung habe, wie ich diese include-Verzeichnisse einbinde und die Bibliotheken verlinke:
http://www.c-plusplus.net/forum/162554Außerdem, was muss ich danach für ein Befehl eingeben, damit mein Testprogramm compliiert wird? Für gewöhnlich gebe ich einfach ein
gcc test.c -o test
Und auf einer anderen Seite habe ich das hier gefunden
gcc test.c `gtk-config --cflags --libs` -o test
was aber auch nicht klappen kann, denn es kommt
gcc:gtk-config: No such file or directory cc1.exe: error: unrecognized command line option "-fcflags" cc1.exe: error: unrecognized command line option "-flibs
"Path ist gesetzt auf C:\Program Files\GTK2-Runtime\bin
Müssen es da aber nicht mehr sein?
Ich habe auch schon in anderen Foren gefragt, aber keiner weiß so recht Bescheid. Bin daher für jede Hilfe dankbar!Hier übrigens das Testprogamm, dass ich gerne kompiliert hätte:
#include <stdlib.h> #include <gtk/gtk.h> #include <windows.h> int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { GtkWidget *fenster; g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, (GLogFunc) gtk_false, NULL); gtk_init (&_argc, &_argv); g_log_set_handler ("Gtk", G_LOG_LEVEL_WARNING, g_log_default_handler, NULL); fenster = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_signal_connect(GTK_OBJECT(fenster), "destroy", GTK_SIGNAL_FUNC(gtk_main_quit),NULL); gtk_widget_show(fenster); gtk_main(); return 0; }
-
Egal mit welchem Framework/Library du arbeitest, eine "Runtime", d.h. die zugehörigen DLL's in der richtigen Version brauchst du immer.
Unter Windows GTK+ zu nehmen ist allerdings nicht ideal. Mit wxWidgets oder QT fährst du auf jeden Fall besser.
-
OK neues Problem mit viel Mühe und Not Code::Blocks und wxwidgets installiert und konfiguriert. Nun Program erstellt. Will ich da Program aber auf einem anderen Computer starten, will er natürlich die *.dll's also gebe ich ich ihm die *.dll's.
Doch da auch schon das Problem, die Dinger sind insgesamt 152MB groß.Nun meine Frage: Ich will nur eine einzige platzsparende *.exe erstellen, in der der benötigte Code der Libraries eingebunden ist. Und wie geht das? Und das nennt man dynamisches Linken von dll's oder? (das nur der benötigte Code eingebunden wird)
Statisch ist, wenn man die dll's einfach dem User mitgibt... habe ich Recht, den die Begriffe sind mir noch unklar.
Außerdem mir ist die modifizierte LGPL Lizenz von wxWidgets unklar.
http://wxwidgets.org/about/newlicen.htm
Darf ich kommerzielle Software erstellen ohne meinen Sourcecode weiterzugeben, auch wenn ich die dll's dynamisch linke. (was ich unter dynamich verstehe oben nachlesen) Oder muss ich nur den Sourcecode von den dll's mitgeben bei kommerzieller Software.
http://de.wikipedia.org/wiki/GNU_Lesser_General_Public_License
-
Halt - statisch Linken = .a-Dateien erstellen und die direkt ins Programm reinwurschteln. Dynamisch Linken = .dll-Dateien (auf Windows) erst zur Laufzeit einbinden, du kannst die sogar ersetzen, ohne das Programm neu kompilieren zu müssen.
LGPL bedeutet, dass du deinen Programmquellcode nicht offenlegen musst, aber wenn du die Library veränderst, dann musst du die Veränderung offenlegen. Zusätzlich musst du AFAIK entweder bei kommerziellen Programmen dein Programm dynamisch linken oder deine Objektdateien mit ausliefern, damit der Kunde auch andere Versionen der Library verwenden kann. Die modifizierte LGPL könnte bedeuten, dass du letzteres auch nicht machen musst.
P.S.: Eine wxWidgets-exe wird ca. 3-5 MB groß - das ist zwar bei einzelnen EXE-Dateien platzsparend, aber bei vielen wxWidgets-EXE-Dateien lohnt es sich, das Ganze mit DLLs zu machen, da du die nur einmal auf dem ganzen System brauchst. Und übrigens: Das sind auch keine 152 MB DLLs. Mach's mal monolithic und nicht-debug. Dann sollten das vielleicht 30 MB sein.
-
Ah dankesehr für die Begriffs-Erklärung, war ja genau umgekehrt. Es sind nun nur noch 21.7 MB und das passt.
LGPL habe ich verstanden, aber trotzdem danke, bin dadurch bestätigt.
Ich weiß bloß nicht was der englische Text da auf der Seite zu bedeuten hat, wäre cool wenn noch einer das klärt!
-
Wenn du wxWidgets unter Linux (GTK) verwenden willst, dann solltest du auch die GTK Hinweise im wxWidgets Paket beachten!
-
k danke!