Diverse Probleme bei der SFML Installation



  • Da ich nach einiger Zeit wieder einmal etwas mit SFML machen wollte habe ich mir SFML1.6 für MinGw (Codeblocks) runtergeladen und versucht es zu instalieren. Als IDE verwende ich Code::Blocks 10.05 mingw package (also das wo mingw bei Codeblocks dabei ist).

    Zur Installation habe ich den inhalt des include Orners in den include Ordner von MinGw kopiert und die .a Dateien aus dem lib Ordner in den lib Ordner von MinGw.

    Das erste Problem ist das das linken gegen static librarys (also zb -lsfml-system-s) nicht funktioniert. Dabei bekomme ich immer folgende Fehlermeldungen:

    ||=== sfmlInstallationtest, Release ===|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\libsfml-system-s.a(Clock.o):Clock.cpp:(.eh_frame+0x11)||undefined reference to `__gxx_personality_v0'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\libsfml-system-s.a(Platform.o):Platform.cpp|| undefined reference to `_Unwind_Resume'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\..\..\..\libsfml-system-s.a(Platform.o):Platform.cpp:(.eh_frame+0x12)||undefined reference to `__gxx_personality_v0'|
    ||=== Build finished: 3 errors, 0 warnings ===|
    

    Das wäre ja für den Anfang noch nicht so schlimm, auch wenn ich auf dauer schon gerne statische librarys benutzen würde weil ich einfach lieber nur 1 exe hab und nicht unmengen dlls dabei.

    Das nächste Problem ist das das Programm (das Clock-Beispiel aus dem SFML-Tutotial) beim start mit der Fehlermeldung abstürtzt das die "libgcc_s_dw2-1.dll" fehlt. Ich hab die mal versuchsweise so aus dem Internet heruntergeladen und wenn sie im selben Verzeichniss ist funktioniert es auch. Aber scheinbar ist das nicht normal das die benötigt wird, denn im Tutorial auf der website von SFML wir sie nicht erwähnt und auch Google findet zu diesem Thema nichts. Auserdem kann ich mich erinner diese früher auch nicht benötigt zu haben.

    Auserdem verlangt Windows 7 beim Ausführen des Clock-Beispiels nach Administratorberechtigungen. Warum braucht das Programm Administrator Berechtigungen? Und wie kann ich das verhindern?

    Clock-Beispiel:

    #include <SFML/System.hpp>
    #include <iostream>
    
    int main()
    {
        sf::Clock Clock;
        while (Clock.GetElapsedTime() < 5.f)
        {
            std::cout << Clock.GetElapsedTime() << std::endl;
            sf::Sleep(0.5f);
        }
    
        return 0;
    }
    

    Ich habe auch bereits versucht die librarys neu zu kompilieren, aber wenn ich den SFML.workspace im build\codeblocks Ordner öffne und dann auf Build Workspace gehe bricht er mit der Meldung:

    mingw32-g++.exe: ..\..\lib\mingw\libsfml-system-d.a: No such file or directory
    

    ab. Woran liegt das?

    Ich hoffe ihr könnt mir helfen!

    mfg
    zigarrre



  • Keiner eine Idee an was es liegen könnte?



  • Hallo Zigarre,

    Du brauchst die header und lib files nicht in die Code::Blocks dirs zu kopieren.
    Einfach
    unter Compiler settings search directories

    compiler
    den include path von sfml\include setzen

    linker
    den lib path von sfmllib setzen.
    Das hat nun allerdings nichts mit Deinem Problem zu tun. Dieses kannst Du wie folgt lösen:

    Unter Project settings Linker settings die libary
    ..\..\..\SFML-1.6\lib\libsfml-system-s.a
    eintragen.
    Dabei steht das -s für static. D.h., die Exe läuft dann ohne weitere dlls.

    Viele Grüße
    Gerhard



  • Schön wenns so einfach wär. Nachdem man mir nichteinmal im offiziellen SFML-Forum helfen konnte habe ich die Entwicklung mit SFML unter Windows eingestellt. Unter Linux läufts problemlos.

    mfg
    zigarrre



  • Das "-d" steht für debug. Irgendwo willst du wohl einen Debug-Build basteln.
    Dein CodeBlocks kommt nicht zufällig mit MinGW-v4? Dieses Jahr (AFAIR) kam endlich ein neues MinGW auf Basis von GCC-4 (genaueres weiß ich grad net, hab nur Linux), da kann es durchaus sein, dass sich an den Libs was gedreht hat und jetzt noch zusätzlich jene ominöse libgcc_s_dw2-1.dll notwendig wird - In verbindung mit Qt4 unter Win ist mir diese Datei schon öfter vor Gesicht gekommen.
    Das mit den Admin-Rechten ist Windows7-User-Gängelung und sollte wenig bis nichts mit SFML zu tun haben (Rechteproblem halt...). Da kann ich dir auch nicht helfen.



  • zigarrre schrieb:

    Schön wenns so einfach wär. Nachdem man mir nichteinmal im offiziellen SFML-Forum helfen konnte habe ich die Entwicklung mit SFML unter Windows eingestellt. Unter Linux läufts problemlos.

    mfg
    zigarrre

    Das könnte auch was mit Beratungsresistenz zu tun haben, dass Du es unter Windows nicht ans laufen gekriegt hast. 😉

    Falls Du jedenfalls soeben dieses Forum, in dem Du auch dein Problem geschildert hast, als "offiziell" bezeichnet hast, muss ich dich enttäuschen: Es ist nicht offiziell.



  • Mit offiziellem Forum meine ich:
    http://sfml-dev.org/forum/

    Und als Beratungsresistenz würd ich das jetzt nicht bezeichnen. Nur weil ich es für sinnfrei halte nur wegen einer Library meine IDE und Compiler über den Haufen zu werfen una mann kann mir auch nicht vorwerfen nicht auf eure Ratschläge gehört zu haben, ich habe alles ausprobiert. Aber ich denke wir sollten hier nicht über eine Konversation die in einem anderen Forum stattgefunden hat diskutieren.

    Auserdem hat sich das, zumindest temporär, erledigt, da ich jetzt unter Linux entwickle und mich erst wieder damit befasse wenn ich fertig bin und das ganze auf Windows portiere.

    mfg
    zigarrre



  • Du hast doch hier den BUMP auch geschafft. Dein Post in dem sfml-dev.org-Forum liegt (mittlerweile) auf Seite 2. Anstelle dass du es einfach mal mit dem MSVC versuchst (der tut nicht weh!), wie es dir vorgschlagen wurde, eröffnest du in 2 weiteren Foren Posts. MSVC Express ist kostenlos, und du darfst (AFAIK) mit deinen Programmen auch Kohle verdienen. Also was hält dich davon ab, auch auf Windows den nativen Compiler zu verwenden?



  • MSVC kommt deswegen nicht in frage weil damit das Programm dann läuft muss auf dem Rechner das VisualC++ Redistributable (oder wie das auch immer heißt) installiert sein. Und eines meiner Anliegen ist das mein Programm auf jedem Windows läuft ohne das es irgendwelchen zusätzlichen Abhängigkeiten hat. Da pack ich noch lieber 100 DLL dazu.

    Und im englischen Forum habe ich noch nicht gepusht weil es mich derzeit nicht mehr interesiert. Ich glaube >6 Stunden nur darin zu investieren eine Library zum laufen zu bekommen und das auch noch ohne den kleinsten sichtbaren Forschritt reichen (zumindest mal vorerst). Immerhin will ich programmieren und nicht Compiler/IDE(-Settings) durchprobieren.



  • Das Problem mit den Abhänigkeiten liegt nicht an SFML sondern an MinGW, der linkt einige Abhänigkeiten als DLL dazu. Daher brauch dein Programm die Datei "libgcc_s_dw2-1.dll".

    Nachdem die Datei in dem Verzeichnis kopiert worden ist (liegt übrigens in MinGW Bin Verzeichnis) will er vielleicht auch noch die "libstdc++-6.dll" oder eine andere (die befinden sich ebenfalls im MinGW Bin Verzeichnis).

    Ich finde die DLLs auch unmöglich. Wenn du die Abhänigkeiten nicht willst solltest du die Linker Flags -static-libgcc und -static verwenden solltest, um die Abhänigkeiten statisch zu linken.

    Bei Code::Blocks geht das glaub ich unter den "Build Options -> Linker Settings -> Other linker options" dort einfach die zwei Flags (mit dem Minus) eintragen.

    Hoffe ich konnte damit helfen.


Anmelden zum Antworten