C++: wxWidgets statisch linken mit GCC

Status
Nicht offen für weitere Antworten.

ttplayer

Aktives Mitglied
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
 
Zuletzt bearbeitet:

ttplayer

Aktives Mitglied
Ü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.o:params.cpp: (.text+0x172) : undefined reference to `wxStringBase::InitWith(char const*, unsigned int, unsigned int)'
C:\Users\David\AppData\Local\Temp/cc6M4Fan.o:params.cpp: (.text+0x1b9) : undefined reference to `wxStringBase::InitWith(char const*, unsigned int, unsigned int)'
C:\Users\David\AppData\Local\Temp/cc6M4Fan.o:params.cpp: (.rdata$_ZTV5MyApp[vtable for MyApp]+0x44) : undefined reference to `wxApp::Initialize(int&, char**)'
 
Zuletzt bearbeitet:

ttplayer

Aktives Mitglied
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?
 
Zuletzt bearbeitet:

ttplayer

Aktives Mitglied
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

:D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben