Eigentümlicher OpenGL-Linker error wg vao



  • Hallo,

    Ich habe versucht, ein OpenGL 3.2 Core Programm zu erstellen. Dabei bekomme ich einen _einzigen_ linker error:

    $ g++ min.cpp -o min -lGL -lsfml2-window -lsfml2-graphics -lsfml2-system
    /tmp/ccMb9wpV.o: In function `main':
    min.cpp:(.text+0x254): undefined reference to `glDeleteVertexArrays'
    collect2: ld returned 1 exit status
    

    Lasse ich die Zeile mit "DeleteVertexArrays" aus, funktioniert alles. (Ich würde trotzdem gerne aufräumen 😃 )

    System ist Linux mit g++ und sfml2. gl3.h von der opengl.org/registry Seite...

    Minimales Programm:

    #include <SFML/Window.hpp> //SFML 2
    #define GL3_PROTOTYPES 1
    #include "gl3.h"
    #include <iostream>
    
    int main()
    {
      sf::ContextSettings settings;
      settings.MajorVersion = 3;
      settings.MinorVersion = 2;
    
      sf::Window window(sf::VideoMode(800, 600), "SFML window",sf::Style::Default,settings);
    
      settings = window.GetSettings();
    
      unsigned int vao;
      glGenVertexArrays(1,&vao);
      glBindVertexArray(vao);
    
      glDeleteVertexArrays(1,&vao);  // Auskommentieren = geht
    
      return EXIT_SUCCESS;
    }
    

    Mir kommt das ziemlich spanisch vor, hat jemand von euch eine Idee?



  • Wo wird denn die Funktion "DeleteVertexArrays" implementiert? Scheint so, dass du nicht alle libs zu deinem Programm linkst.

    MfG, Jochen



  • Jochen S. schrieb:

    Wo wird denn die Funktion "DeleteVertexArrays" implementiert? Scheint so, dass du nicht alle libs zu deinem Programm linkst.

    MfG, Jochen

    DeleteVertexArrays ist eine OpenGL Funktion. Ich hätte vermutet, dass sie, genauso, wie es mit allen anderen OpenGL Funktionen (u.a. GenVErtexArrays) in der OpenGL lib implementiert ist. Und die linke ich ja bereits dazu. Die beiden anderen Funktionen, die VertexArrays betreffen findet der Linker ja auch - Das ist es ja, was mich stutzig macht...



  • langeweile schrieb:

    gl3.h von der opengl.org/registry Seite...

    Du kannst nicht einfach die Header von der opengl.org Seite nehmen und erwarten, dass sie mit deiner OpenGL Implementation funktionieren. ^^

    Du musst schon die Header deiner OpenGL Implementation benutzen. Da z.Zt. weder Mesa noch Gallium3D eine brauchbare Unterstützung für OpenGL 3 haben, bist du da auf aktuelle Versionen der proprietären NVIDIA oder AMD Treiber angewiesen, die beide die korrekten Header und Libraries mitbringen. :3



  • Husky Puppy schrieb:

    langeweile schrieb:

    gl3.h von der opengl.org/registry Seite...

    Du kannst nicht einfach die Header von der opengl.org Seite nehmen und erwarten, dass sie mit deiner OpenGL Implementation funktionieren. ^^

    Du musst schon die Header deiner OpenGL Implementation benutzen. Da z.Zt. weder Mesa noch Gallium3D eine brauchbare Unterstützung für OpenGL 3 haben, bist du da auf aktuelle Versionen der proprietären NVIDIA oder AMD Treiber angewiesen, die beide die korrekten Header und Libraries mitbringen. :3

    Dann finden sich die aber in meinem Nvidia HEader nicht 😞
    komisch, der treiber unterstützt 3.2 und der header enthält die vao-Funktionen scheinbar nicht.

    Dann werd ich da mal weiterrecherchieren, danke!

    edit: ahhw...! Ich hatte noch nen MESA-header auf dem System. Der nvidia-header lag in nem anderen dir. Jetzt mags... 😃

    D A N K E !


Anmelden zum Antworten