我正在尝试使用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
创建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上做错了什么?
我最终创建了自己的OpenGL标头,并使用wgl / glx / dlopen加载了函数
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句