Biblioteki .dll w plikach .exe ?

Biblioteki .dll w plikach .exe ?
P3
  • Rejestracja:około 4 lata
  • Ostatnio:ponad rok
  • Postów:103
0

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 ?

edytowany 1x, ostatnio: Riddle
P3
do innych framworków są wymagane dynamiczne biblioteki a programy które tworzę nie potrzebują szybkości, jak na tą chwile
CZ
Nie w temacie, więc w komentarzu napisze. Nie ucz się winapi ale QT. Raz, że prostsze, dwa, że się tego używa nacodzien.
Althorion
Moderator C/C++
  • Rejestracja:prawie 10 lat
  • Ostatnio:około 7 godzin
  • Postów:1605
3

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.

ZD
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
3

@plugan300:

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ń.


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
ZD
Np w wxwidgets tzreba troszkę doczytać, i statyczne biblioteki w pelni daje się zbudować https://www.google.com/search?q=wxwidgets+static+linking
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:mniej niż minuta
  • Postów:2098
2

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"


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
edytowany 2x, ostatnio: Marius.Maximus
JV
  • Rejestracja:ponad 6 lat
  • Ostatnio:3 miesiące
  • Postów:242
0

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:

Kopiuj
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:

Kopiuj
#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:

Kopiuj
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.

edytowany 1x, ostatnio: jvoytech

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.