Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

JanB

Frischling

  • »JanB« ist der Autor dieses Themas
  • Private Nachricht senden

1

06.08.2013, 13:24

C++ Problem beim linken von MinGW32 Bibliotheken

Hallo liebe Programmierer,
ich bin dabei C++ zu erlernen und habe schon einige Schwierigkeiten gehabt, die ich aber alleine lösen konnte. Da ich viele Eigenheiten und Prinzipien von C++ noch nicht durchschaut habe, muss ich jedoch Rat von euch hinzuziehen.

Problem:
Grundsätzlich ist mein Problem, dass ich beim ausführen eines C++-Programmes, dass mit MinGW32 (Version 4.6.2) kompiliert wurde, folgenden Fehler bekomme: Programm kann nicht ausgeführt werden, weil libgcc-s-dw2-1.dll auf dem Computer fehlt. Darauf hin habe ich mich auf die suche nach dem Problem gemacht... Ich verwende eine Bibliothek: SFML, die ich selbst mit CMake und MinGW32 für meinen Compiler kompatibel kompiliert habe. Mein Programm wird mit folgenden Parametern kompiliert:

Quellcode

1
g++ -static quelle.cpp -o .\exe\test.exe -lsfml-graphics -lsfml-system -lsfml-window


Bisheriger Lösungsweg:
  1. Um mein Problem zu lösen habe ich mein Problem bei Google gesucht. Dabei ist mir folgender Lösungsweg aufgefallen: beim Kompilieren -static als Argument übergeben. Das habe ich getan. Leider bestand das Problem.
  2. Zum testen habe ich eine neue Datei erstellt und kompiliert, ohne Bibliotheken einzubinden. Es hat super funktioniert, ohne die Fehlermeldung. Also muss es an der, von mir kompilierten, Bibliothek (SFML) liegen...
  3. Nun habe ich Stunden mit verschiedensten Suchen bei Google verbracht, ohne direkt fündig zu werden. Irgendwann kam ich auf eine Seite, auf der angedeutet wurde, dass es an verwendeten dynamischen Bibliotheken (*.dll's) liegen könnte, da diese eventuell nicht mit dem Argument -static kompiliert wurden.
  4. Nun wollte ich die SFML-Bibliothek erneut kompilieren, allerdings mit dem Argument -static. Leider habe ich festgestellt, dass es nicht möglich ist...
Meine Frage an euch:
Wie kann ich die Meldung umgehen? Bzw. wie löst ihr das Problem? Ich weiß, dass ich die besagte *.dll einfach in das Verzeichnis meines Programmes kopieren könnte, allerdings weiß ich nicht, wie das mit der Lizenz aussieht? Ich habe irgendwo gelesen, dass man, warum auch immer, nur berechtigt ist, die *.dll statisch zu linken und nicht dynamisch? Stimmt das? Oder kann man die MinGW32 spezifischen *.dll's einfach mit einer Lizenz in den Ordner des Programms kopieren?

Vielen Dank schon mal und ein lieber Gruß,
JanB.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

06.08.2013, 16:59

Es sollte kein Problem sein, die DLL beizulegen.
Was meinst du mit "DLL statisch linken"? Eine DLL wird per Definition dynamisch gelinkt, darum heißt sie ja Dynamic Link Library.

JanB

Frischling

  • »JanB« ist der Autor dieses Themas
  • Private Nachricht senden

3

06.08.2013, 17:52

Entschuldigung, dass ich mich nicht richtig ausgedrückt habe. Ich frage mich nur, warum es ohne SFML funktioniert aber nicht mit...? Liegt das an den *.dll's der SFML? benötigen diese die besagte *.dll?

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

06.08.2013, 18:32

Sieht so aus ...
Lade die SFML-DLLs mal mit dem Dependency Walker, dann wirst du sehen, welche DLLs gebraucht werden.

Werbeanzeige