Как использовать opengl в статической lib?

0

Я пытаюсь создать статическую шейдерную библиотеку с OpenGL. Я хочу, чтобы он был как можно более переносимым (Windows Linus Android...). Для этого предлагаем создать заголовок, который включает gl и glext: OpenGL.hpp

...
#define GL_GLEXT_PROTOTYPES
#if defined(OS_WINDOWS)

    #ifdef _MSC_VER
        #include <windows.h>
    #endif

    #include <GL/gl.h>
    #include <GL/glext.h>

#elif defined(OS_LINUX)

    #include <GL/gl.h>
    #include <GL/glext.h>
...

И Shader.hpp

...
class Shader
{
    unsigned int m_id;
public:
    Shader();
    ...
};
...

И Shader.cpp

...
#include <Shader.hpp>
#include <OpenGL.hpp>
Shader::Shader()
{
    m_id = glCreateProgram();
    ...
}
...

Затем выполнил Shader.cpp в Shader.o и с помощью ar created libShader.a. После этого на Android я могу скомпилировать:

g++ -I ./include -c main.cpp -o main.o
g++ -L ./lib -o main main.o -lShader -lSDL2 -lGLESv1_CM -lGLESv2

И он работает безупречно. Но на окнах, когда я связываю

g++ -L ./lib -o main.exe main.o -lShader -lSDL2 -lglew32 -lopengl32 -lglu32

G++ дает lib\libShader.a(Shader.o):Shader.cpp undefined reference to glCreateProgram@8. На окнах main.cpp выглядит так:

#include <GL/glew.h>
#include <Shader.hpp>
...
int main()
{
    Shader shader1;
    ...
    GLuint test_id_for_main = glCreateProgram();
    ...
}
...

Простейшая вещь - test_id_for_main работает (если я прокомментирую Shader-s) без ошибки ссылки. Что я сделал неправильно на окнах?

  • 0
    Вы связываете GLEW статически? Попробуйте добавить -DGLEW_STATIC .
  • 0
    Так как я могу использовать любую функциональность glew в main.cpp, я не думаю, что это будет проблемой.
Показать ещё 8 комментариев
Теги:
opengl
glsl

1 ответ

0
Лучший ответ

В итоге я создал свои собственные заголовки OpenGL и загрузил функции с помощью wgl/glx/dlopen

Ещё вопросы

Сообщество Overcoder
Наверх
Меню