如何在静态lib中使用opengl?

时间:2014-02-15 21:02:19

标签: c++ windows opengl glsl

我正在尝试使用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.oar创建了libShader.a。 之后在android上我可以这样编译:

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

它运行完美无缺。 但是当我链接时在Windows上

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 错误。 在Windows上,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)没有链接错误。 我在Windows上做错了什么?

1 个答案:

答案 0 :(得分:0)

我最终创建了自己的OpenGL标头并使用wgl / glx / dlopen加载函数