Forum: PC-Programmierung dll in executable integrieren;


von pointer (Gast)


Lesenswert?

Hallo,

wenn ich bei Win10 ein C++-Programm mit eclipse und MINGW64 mit einem 
eigenen Makefile compiliere, erscheint beim Ausführen der der 
*.exe-Datei die Fehlermeldung :

"Die Ausführung des Codes kann nicht fortgesetzt werden, da 
libwinpthread-1.dll nicht gefunden wurde."

Wenn man im Betriebssystem unter PATH den Pfad zur Datei 
"libwinpthread-1.dll" angibt, funktioniert das Programm.
Damit das Programm aber auch auf anderen Rechnern sicher lauffähig ist, 
wäre es besser, den Code mit in das Programm aufzunehmen.

Hat jemand einen Tipp, wie man dll´s bei eclipse und MINGW64 mit in das 
executable aufnimmt ?
Geht das über eine Option in Eclipse oder gibt es da einen speziellen 
Befehl im makefile ?

THX !

von Mario M. (thelonging)


Lesenswert?

Ich würde die DLL einfach in den EXE-Ordner kopieren.

von Paul (Gast)


Lesenswert?

Mario M. schrieb:
> Ich würde die DLL einfach in den EXE-Ordner kopieren.

Er möchte aber:

pointer schrieb:
> Damit das Programm aber auch auf anderen Rechnern sicher lauffähig ist,
> wäre es besser, den Code mit in das Programm aufzunehmen.

Das bedeutet meines Wissens nach, dass die DLL mit dazu gelinkt werden 
müsste...

von Klaus W. (mfgkw)


Lesenswert?

Mit meinem bescheidenen Windowswissen ist aber das nicht möglich mit 
einer DLL.

Falls man den Quelltext dazu hat, müsste man den zu einer LIB 
kompilieren statt zu einer DLL. Die LIB kann man dann mit seinem 
restlichen Programm linken und hat alles in einer Datei.

von physicist (Gast)


Lesenswert?


von pointer (Gast)


Lesenswert?

physicist schrieb:
> Statisch linken mit der statischen Variante der Bibliothek:
> 
https://stackoverflow.com/questions/13768515/how-to-do-static-linking-of-libwinpthread-1-dll-in-mingw

Danke, es kann so einfach sein :

"If your toolchain includes the static winpthreads, adding the option
-static
Will pull in static versions of all libraries it can."

mit
"FLAGLIB = -L${LIB_DIR} -static"
hat das Programm scheinbar alles was es braucht und läuft ohne externe 
Libraries.

von Heinz B. (Firma: Privat) (hbrill)


Lesenswert?

Ein anderer Weg ist, wenn man nur die DLL braucht,
diese als RC_DATA als Ressource einbinden. Beim Start
des Programms zuerst die Ressource wieder auslesen und
in den Programmordner speichern. Dann wie gewohnt verfahren.

Aber es ist ja schon eine bessere Lösung vorgeschlagen worden.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.