code::blocks, wxwidgets und standalone Exe

z.B. wxWidgets, GTK+, Qt, OpenGL, DirectX
Antworten
lordnoxx
Beiträge: 2
Registriert: Di Mai 17, 2011 9:04 am

code::blocks, wxwidgets und standalone Exe

Beitrag von lordnoxx » Di Mai 17, 2011 9:15 am

Hallo zusammen,
das hier ist meine erste Frage bei euch hier im Forum. ;)

Ich möchte gleich mal vorausnehmen....ich bin kein Informatiker. Komme eher aus der Elektrotechnik. Was solls ich muss ne Software schreiben. Sprache soll C++ sein, und es muss eine GUI her. Habe irgendwie dann an code::blocks und WxWidgets Gefallen gefunden.

Nun zu meinem Problem. Die Software die ich da schreiben muss, soll am Ende als eine einzige, eigenständige exe-Datei (Windows) vorliegen. Ich bin jetzt nicht so der Profi im Proggen, aber ich denke ich gehe hier recht in der Annahme, dass ich dafür dann irgendwelche Libraries von Wxwidgets statisch mit in die exe linken muss.

Habe zum Thema auch schon etwaige dinge im Netz gefunden, aber irgendwie komme ich damit nicht klar. Und was hat das außerdem mit der Art und Weise zu tun, wie WxWidgets selbst gebaut wurde. Da gibt es ja dieses Kommando das man im Netz findet:

Code: Alles auswählen

mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release clean
Vielleicht könnt ihr mir helfen hier ein bisschen Licht ins Dunkel zu bringen. Und dann würde mich natürlich interessieren, wie dieses Statische Linken dann funktioniert, und was ich dazu eventuell in code::blocks einstellen muss.

Grüße

EDIT: Das Programm muss auch auf anderen Rechnern unter win2000, WinXP, Win Vista und Win 7 laufen. Müsste ich dazu nicht auch die C++ laufzeit Libs statisch linken? Hatte da nämlich etwas bzgl. der mingwm10.dll gelesen.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: code::blocks, wxwidgets und standalone Exe

Beitrag von Xin » Di Mai 17, 2011 9:51 am

lordnoxx hat geschrieben:Hallo zusammen,
das hier ist meine erste Frage bei euch hier im Forum. ;)
Herzlich willkommen. :)
lordnoxx hat geschrieben:Nun zu meinem Problem. Die Software die ich da schreiben muss, soll am Ende als eine einzige, eigenständige exe-Datei (Windows) vorliegen. Ich bin jetzt nicht so der Profi im Proggen, aber ich denke ich gehe hier recht in der Annahme, dass ich dafür dann irgendwelche Libraries von Wxwidgets statisch mit in die exe linken muss.
Da liegst Du richig.
lordnoxx hat geschrieben:Habe zum Thema auch schon etwaige dinge im Netz gefunden, aber irgendwie komme ich damit nicht klar. Und was hat das außerdem mit der Art und Weise zu tun, wie WxWidgets selbst gebaut wurde. Da gibt es ja dieses Kommando das man im Netz findet:

Code: Alles auswählen

mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release clean
Nur um eins Klarzustellen - ich bin zwar Informatiker, habe von wxWidgets aber (leider noch) keinen Plan. ^^

Ich weiß aber, dass wxwidgets ein Konfigurationstool hat namens wx-config.

Ich habe so diesen Aufruf gefunden:

Code: Alles auswählen

g++ `wx-config --cxx --cppflags` params.cpp -o params.exe `wx-config --static=yes --libs`
Das sieht so aus, als würde es Deinem Problem recht nahe kommen.
lordnoxx hat geschrieben:Vielleicht könnt ihr mir helfen hier ein bisschen Licht ins Dunkel zu bringen. Und dann würde mich natürlich interessieren, wie dieses Statische Linken dann funktioniert, und was ich dazu eventuell in code::blocks einstellen muss.
Die Lib müsstest Du nur als zusätzliche Abhängigkeit angeben, also das, was `wx-config --static=yes --libs`.
lordnoxx hat geschrieben: EDIT: Das Programm muss auch auf anderen Rechnern unter win2000, WinXP, Win Vista und Win 7 laufen. Müsste ich dazu nicht auch die C++ laufzeit Libs statisch linken? Hatte da nämlich etwas bzgl. der mingwm10.dll gelesen.
Wenn Du Funktionen aus ihr benutzt, dann ja. Das wird vermutlich schon der Startcode des C-Programms sein -also das, was vor main() gerufen wird.

Ich kann das hier jetzt nicht im Detail ausprobieren, von daher kann Dir hoffentlich fat-lobyte konkreter helfen, da er zur Zeit einen Artikel zu dem Thema schreibt und entsprechend vermutlich deutlich besser Bescheid weiß als ich.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: code::blocks, wxwidgets und standalone Exe

Beitrag von fat-lobyte » Di Mai 17, 2011 12:06 pm

lordnoxx hat geschrieben:Hallo zusammen,
Hallo :-)
lordnoxx hat geschrieben:Nun zu meinem Problem. Die Software die ich da schreiben muss, soll am Ende als eine einzige, eigenständige exe-Datei (Windows) vorliegen. Ich bin jetzt nicht so der Profi im Proggen, aber ich denke ich gehe hier recht in der Annahme, dass ich dafür dann irgendwelche Libraries von Wxwidgets statisch mit in die exe linken muss.
Wenn du willst, dass du eine einzige .exe hast, musst du mit statischen Bibliotheken linken. Alternativ dazu kannst du die Bibliothek auch Dynamisch (als DLL) dazulinken, dann müssen aber die DLL-Dateien immer im Verzeichnis der .exe liegen (oder woanders auf dem %Path%).
lordnoxx hat geschrieben:Nun zu meinem Problem. Die Software die ich da schreiben muss, soll am Ende als eine einzige, eigenständige exe-Datei (Windows) vorliegen. Ich Habe zum Thema auch schon etwaige dinge im Netz gefunden, aber irgendwie komme ich damit nicht klar. Und was hat das außerdem mit der Art und Weise zu tun, wie WxWidgets selbst gebaut wurde.
Wie gesagt schreibe ich gerade an dem Artikel, wie man wxWidgets tatsächlich baut. Er ist noch nicht fertig, aber ich habe zumindest die verschiedenen Konfigurationsmöglichkeiten beschrieben. Du findest ihn hier:

http://www.proggen.org/doku.php?id=gui:wx:buildlib

Jetzt habe ich leider keine Zeit, aber ich hoffe dass ich ihn morgen oder heute fertigstellen kann.

Da gibt es ja dieses Kommando das man im Netz findet:

Code: Alles auswählen

mingw32-make -f makefile.gcc MONOLITHIC=1 SHARED=1 UNICODE=1 BUILD=release clean
Das ist schon ziemlich gut (bis auf das clean am ende). Du musst dieses Kommando unter %wxWidgets_ROOT%/build/msw ausführen, wenn du GCC auf dem Pfad hast. Das baut die Bibliotheken mit den angegebenen Einstellungen (eine Erklärung der Einstellungen findest du in meinem Artikel).
lordnoxx hat geschrieben:Und dann würde mich natürlich interessieren, wie dieses Statische Linken dann funktioniert, und was ich dazu eventuell in code::blocks einstellen muss.
Bei Code::Blocks kenne ich mich wiederum nicht aus, und hoffe auf ein Bisschen Unterstützung durch meine Forenkollegen :-)
Es geht in jedem Fall darum, dass a) die wxWidgets Headerdateien (*.h), b) die wxWidgets Konfigurationsheader (lib/mswud/*.h) und die Bibliotheken selbst (*.lib/*.a/*.dll) dort liegen woe Code::Blocks sie findet.

Leider benötigt wxWidgets noch ziemlich viele Compilerflags um korrekt gebaut zu werden. Unter Linux gibt es dazu das Tool "wx-config", wie unten von Xin erwähnt. Dieses gibt die benötigten Flags aus.
Dieses gibt es Standardmäßig nicht für Windows, es gibt aber eine Inoffizielle Version hier: http://sites.google.com/site/wxconfig/

Ich persönlich baue mit "CMake", das funktionen für das korrekte Einbinden von wxWidgets bereit stellt.

Das Programm muss auch auf anderen Rechnern unter win2000, WinXP, Win Vista und Win 7 laufen. Müsste ich dazu nicht auch die C++ laufzeit Libs statisch linken? Hatte da nämlich etwas bzgl. der mingwm10.dll gelesen.
Die mingwm10.dll benötigst du, wenn du mit einem alten MinGW-Release (GCC 3.5) baust. Baust du mit einer neueren Version (z.B. TDM-GCC) benötigst du diese DLL nicht mehr.
Baust du mit Visual Studio, musst du die Entsprechende Runtime Bibliothek beilegen (msvcrt80.dll/msvcrt90.dll/msvcrt100.dll). Achtung! Baust du mit Visual Studio 2010, wird auf dem Rechner für den du kompilierst mindestens Windows XP SP2 benötigt!

Ich hoffe das hilft ein Bisschen. Der Rest des Artikels kommt in naher Zukunft.

mfg, fat-lobyte
Haters gonna hate, potatoes gonna potate.

Antworten