Witam
Uczę się c++, ostatnio próbuje coś robić w zakresie tworzenia GUI, a to tego są potrzebne frameworki. Próbuje winapi ale jest dość trudno, a co gorsza wiedza w Internecie jest śladowa na ten temat. Dużym plusem wymienionego framworka jest to że generuję tylko jeden plik .exe który potrzebuje jedynie tego co oferuje windows do uruchomienia. Chciałbym spróbować coś porobić w innym narzędziach typu sdl2, wxwidgets. Czy da się zrobić plik .exe w którym będą skompilowane te biblioteki, z tego co wiem biblioteki .dll są już skompilowane, chodzi po prostu o to żeby był tylko jeden plik .exe ?
- Rejestracja:około 4 lata
- Ostatnio:ponad rok
- Postów:103
To, z definicji, nie chcesz linkować dynamicznie do biblioteki (DLL stoi od Dynamic-Link Library), tylko chcesz kompilować statycznie. Zobacz, czy licencja tego, co linkujesz, na to pozwala, i przestaw odpowiednie opcje w systemie budowania, z którego korzystasz.
- Rejestracja:około 3 lata
- Ostatnio:ponad rok
- Postów:2310
Olbrzymia większość libek GUI ma wariant w postaci bilbioteki *.LIB tylko poszukać - a to co chcesz zrobić, sie nazywa statyczne linkowanie.
Nie ma potrzeby gwałcić DLL
Althorion napisał(a):
To, z definicji, nie chcesz linkować dynamicznie do biblioteki (DLL stoi od Dynamic-Link Library), tylko chcesz kompilować statycznie. Zobacz, czy licencja tego, co linkujesz, na to pozwala, i przestaw odpowiednie opcje w systemie budowania, z którego korzystasz.
W szczególności Qt utrudnia licencyjne (przynajmniej biznesowe) użycie statycznie linkowanych wersji.
Faktem jest, że generalnie w o.s. jest licencja LGPL, która preferuje DLL (nie zmusza do włączenia swojego kodu pod GPL) , ale poza Qt inne raczej nie podkładają świń.

- Rejestracja:ponad 14 lat
- Ostatnio:mniej niż minuta
- Postów:2098
Naucz się rozpoznawać rzeczy mało ważne,
żeby nie zawracać sobie nimi głowy
A co to komu przeszkadza że jest EXE + DLL a nie jedno EXE ?
Widziałem takie cudo że EXE rozpakowywało do TEMP DLL i używało takiej biblioteki.
W aplikacji 32-bitowej można było też umieścić DLL w zasobach a potem użyć funkcji ale do użycia Qt albo wxwidgets raczej to nie przejdzie
Jako twórca dystrybuujesz oprogramowanie i dodajesz zależności do paczki
Aby było łądniej możesz zrobić EXE w ROOT-FOLDER a wszystkie DLL w "ROOT-FOLDER/lib"
- Rejestracja:ponad 6 lat
- Ostatnio:3 miesiące
- Postów:242
Jeżeli chodzi o SDL2
i wxWidgets
(mingw
pod windowsem) to przy instalacji bibliotek jest tam dodatkowo konfigurator sdl2-config
i wx-config
, który zwraca parametry dla kompilatora, wywołanie wygląda tak:
g++ -o main sdl2_test.cpp `sdl2-config --cflags --static-libs` -lglew32 -lopengl32 -lglu32
g++ -o main wx_test.cpp `wx-config --cflags --libs --static`
tak skompilowany program nie potrzebuje już bibliotek SDL2
i wxWidgets
, ale może się pluć o inne np. libstdc++-6.dll
, libgcc_s_seh-1.dll
, libpng16.dll
, etc. Żeby się ich pozbyć trzeba dać dodatkowe flagi -static -static-libstdc++ -static-libgcc
. Niektóre biblioteki wymagają innych zabiegów, np. GLEW przed includowaniem nagłówka potrzebuje zdefiniowane makro GLEW_STATIC
, żeby biblioteka zlinkowała się statycznie:
#define GLEW_STATIC
#include <glew.h>
Poniżej wszystkie opcje dla programów z SDL2
i wxWidgets
, które generują exec-i o naprawdę sporych rozmiarach:
g++ -o main sdl2_test.cpp `sdl2-config --cflags --static-libs` -lglew32 -lopengl32 -lglu32 -static -static-libgcc -static-libstdc++
g++ -o main wx_test.cpp `wx-config --cflags --libs --static` -static -static-libstdc++ -static-libgcc
dla testów uruchomiłem konsole cmd
, wyczyściłem PATH
(set PATH=""
) i programy uruchomiły się bez pytania o DLL-ki.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.