# C++: wxWidgets statisch linken mit GCC



## ttplayer (18. Nov 2009)

Ich weiß, dass es dieses Thema schon oft gab, aber ich komme auf keinen grünen Zweig. ;(
Ich will ein wxWidgets-Programm statisch linken, so dass ich die beiden Dateien
wxbase28_gcc.dll und wxmsw28_core_gcc.dll nicht mehr brauche.

Das ist mein bisheriger Aufruf:
g++ -B C:\SourceCode\Libraries\wxWidgets2.8\lib\gcc_dll -Wno-long-long -Os -O3 -s -IC:\SourceCode\Libraries\wxWidgets2.8\include -pedantic params.cpp -o params.exe -static lwxmsw28_core -lwxbase28 -enable-auto-import

Der gibt zwar keinen Kompilierfehler aus, aber das Programm ist nur 25 KB groß und beim Starten brauchts die DLLs.
Außerdem geht das Konsolenfenster noch auf.
Könnt ihr mir helfen??

PS: Ich benutze wxPack (da es mit meiner eigenen Kompilierung noch schlechter klappt) und MinGW.
PPS: Mit Codeblocks genau das Gleiche, da hab ich gedacht, ich machs gleich von Hand


----------



## ttplayer (19. Nov 2009)

Übrigens: Mit gcc_lib funktioniert das Ganze nicht, da gibt er haufenweise Fehlermeldungen aus, so wie das auch bei meinem static-kompilierten wxWidgets ist:
(Auszug)

:/wxWidgets-2.8.10/lib/gcc_lib\libwxmsw28u_core.a(corelib_bmpbuttn.o) :bmpbuttn.cpp: (.text+0x1e7e): undefined reference to `SelectObject@8'
:/wxWidgets-2.8.10/lib/gcc_lib\libwxmsw28u_core.a(corelib_spinbutt.o) :spinbutt.cpp: (.text+0x36f):  undefined reference to `CreateUpDownControl@48'
:/wxWidgets-2.8.10/lib/gcc_lib\libwxmsw28u_core.a(corelib_statbmp.o) :statbmp.cpp: (.text+0x9e3):  undefined reference to `DeleteObject@4'
:/wxWidgets-2.8.10/lib/gcc_lib\libwxmsw28u_core.a(corelib_listbox.o) :listbox.cpp: (.text+0x27a0):  undefined reference to `SelectObject@8'
:/wxWidgets-2.8.10/lib/gcc_lib\libwxmsw28u_core.a(corelib_listbox.o) :listbox.cpp: (.text+0x27dc):  undefined reference to `GetTextMetricsW@8'
:/wxWidgets-2.8.10/lib/gcc_lib\libwxmsw28u_core.a(corelib_listbox.o) :listbox.cpp: (.text+0x284b):  undefined reference to `SelectObject@8'
:/wxWidgets-2.8.10/lib/gcc_lib\libwxmsw28u_core.a(corelib_listbox.o) :listbox.cpp: (.text+0x294a):  undefined reference to `SelectObject@8'
:/wxWidgets-2.8.10/lib/gcc_lib\libwxmsw28u_core.a(corelib_listbox.o) :listbox.cpp: (.text+0x29d0): undefined reference to `GetTextExtentPoint32W@16'
:/wxWidgets-2.8.10/lib/gcc_lib\libwxmsw28u_core.a(corelib_listbox.o) :listbox.cpp: (.text+0x2a9e): undefined reference to `GetTextExtentPoint32W@16'
:/wxWidgets-2.8.10/lib/gcc_lib\libwxmsw28u_core.a(corelib_listbox.o) :listbox.cpp: (.text+0x331f): undefined reference to `CreateICW@16'
:/wxWidgets-2.8.10/lib/gcc_lib\libwxmsw28u_core.a(corelib_listbox.o) :listbox.cpp: (.text+0x343a): undefined reference to `DeleteDC@4'
:/wxWidgets-2.8.10/lib/gcc_lib\libwxmsw28u_core.a(corelib_fontutil.o) :fontutil.cpp:  (.text+0x889): undefined reference to `CreateFontIndirectW@4'
:/wxWidgets-2.8.10/lib/gcc_lib\libwxmsw28u_core.a(corelib_fontutil.o) :fontutil.cpp: (.text+0x89a): undefined reference to `DeleteObject@4'
:/wxWidgets-2.8.10/lib/gcc_lib\libwxmsw28u_core.a(corelib_fontdlg.o) :fontdlg.cpp: (.text+0x395): undefined reference to `ChooseFontW@4'
:/wxWidgets-2.8.10/lib/gcc_lib\libwxmsw28u_core.a(corelib_listctrl.o) :listctrl.cpp: (.text+0x8dad): undefined reference to `SetTextColor@8'

und ganz am Anfang:

C:\Users\David\AppData\Local\Temp/cc6M4Fan.oarams.cpp: (.text+0x172) : undefined reference to `wxStringBase::InitWith(char const*, unsigned int, unsigned int)'
C:\Users\David\AppData\Local\Temp/cc6M4Fan.oarams.cpp: (.text+0x1b9) : undefined reference to `wxStringBase::InitWith(char const*, unsigned int, unsigned int)'
C:\Users\David\AppData\Local\Temp/cc6M4Fan.oarams.cpp: (.rdata$_ZTV5MyApp[vtable for MyApp]+0x44) : undefined reference to `wxApp::Initialize(int&, char**)'


----------



## ttplayer (19. Nov 2009)

Also in Codeblocks funktionierts jetzt mit den projekteinstellungen dass wxwidgets die libraries nicht als dll nutzt.
Bloß auf der Kommandozeile krieg ichs einfach nicht hin, ich glaub', es liegt daran, dass er irgendwelche OS-Libraries nicht hat, zumindest kann ich mit -lgdi32 die Zahl der Fehlermeldungen deutlich reduzieren, aber eigentlich sollte es doch auch ohne gehen, oder?


----------



## ttplayer (21. Nov 2009)

OK, nach langem "Wurschteln" funktionierts jetzt für Win32:
g++ -mwindows -mthreads -Wno-long-long -O3 -s -IC:\wxWidgets-2.8.10\include params.cpp -o params.exe -LC:\wxWidgets-2.8.10\lib\gcc_lib -lwxmsw28 -lwxtiff -lwxjpeg -lwxpng -lwxzlib -lwxregex -lwxexpat -lgdi32 -lwxregex -lcomctl32 -lole32 -loleaut32 -luuid


----------

