Probleme bei Einrichtung von OpenGl



  • Hallo,
    ich folge diesem Tutorial http://www.opengl-tutorial.org/beginners-tutorials/tutorial-1-opening-a-window/.

    Als Fehlermeldung bekomme ich:
    LNK2001 Nicht aufgelöstes externes Symbol "glfwInit". TestOpenGl D:\VisualStudio\TestOpenGl\TestOpenGl\TestOpenGl.obj 1 (und noch weitere LNK2001 Fehler)

    Glew und GLFW habe ich mit VisualStudio kompiliert und unter Projekteigenschaften die include und lib Verzeichnisse hinzugefügt. Bei Linker-> Eingabe-> Zusätzliche Abhängigkeiten habe ich
    opengl32.lib
    glew32.lib
    glfw3.lib
    hinzugefügt.

    Woran könnte das liegen?
    Danke im Vorraus.



  • Ändere mal die Reihenfolge der Libs (opengl32.lib als Letztes).



  • Habe opengl32.lib als letztes hinzugefügt, bekomme aber noch die selben Fehlermeldungen.
    Kann es sein das eine GLFW dll fehlt? Beim kompilieren von GLFW wurde nur keine erstellt.



  • Wenn ich das Programm im x86 Modus kompiliere klappt es.



  • dann hast du glfw nur in 32 bit installiert und nicht in 64bit



  • Bei Source Package gab es nur die eine Version, habe auch versucht die als 64bit zu kompilieren,was aber nicht funktioniert hat.



  • Es gibt pre-compiled binaries für Windows (32/64Bit)...
    https://www.glfw.org/download.html

    Und wenn das selbst bauen nicht funktioniert, dann hast du vermutlich (da du keine Fehlermeldung lieferst) die abhängigkeiten von glfw nicht in 64bit beim bauen angegeben/verwendet



  • Nachdem ich alles nochmal neu kompiliert habe, funktioniertes jetzt im x64 Modus.



  • Hallo,
    Ich wollte jetzt statt glfw sfml verwenden, nur wenn ich dann versuche Glew zu initialisieren stürzt das Programm ab.

        #define GLEW_STATIC
        #include <GL/glew.h>
        #include <SFML/OpenGL.hpp>
        #include <SFML/Window.hpp>
    
    
         int main() {
    
    
    sf::Window window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, sf::ContextSettings(32));
    window.setVerticalSyncEnabled(true);
    
    window.setActive(true);
    
    
    bool running = true;
    sf::Event event;
    
    if (GLEW_OK != glewInit) {
    	std::cout << "Glew Fehler" << std::endl;
    	std::cout << glewGetErrorString << std::endl;
    	return EXIT_FAILURE;
    }
    

    Die zusätzlichen Abhängigkeiten sind:
    libglew32.lib
    glew32.lib
    sfml-system.lib
    sfml-graphics.lib
    sfml-window.lib
    sfml-audio.lib
    opengl32.lib



  • Was eine miese Falle. Du rufst die Funktion 'glewInit' tatsächlich gar nicht auf, dazu fehlen die Klammern. Es compiliert trotzdem, denn GLEW_OK ist (vermutlich) eine Konstante mit dem Wert 0, welchen du nicht etwa mit dem Rückgabewert von 'glewInit' vergleichst, sondern mit der Adresse dieser Funktion. Und weil die stets ungleich 0 ist, wird der if-Zweig aufgeführt, die Nachricht ausgegeben und das Programm beendet sich (was du vermutlich unter 'abstürzen' verstehst).



  • Warnungen des compilers aktivieren. Die melden sowas bei höheren warn leveln.



  • Danke, jetzt klappt es. Habe ganz übersehen das dort Klammern fehlen. Das Warnlevel habe jetzt auch höher gesetzt.


Log in to reply