如何使用GLEW与MinGW

我试图在我的项目中使用glew32.lib文件链接,而不是自己编译Glew源来获取glew.a文件。 现在,我的项目中存在以下链接错误:

g++ -o Chapter10(OpenCLTest).exe src\Chapter10(OpenCLTest).o -lopengl32 -lglew -lglut32 -lglu32 -lopencl src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x167): undefined reference to `_imp____glewBindBuffer' src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x39a): undefined reference to `_imp__glewInit' src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x3a7): undefined reference to `_imp__glewIsSupported' src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x48a): undefined reference to `_imp____glewGenBuffers' src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x495): undefined reference to `_imp____glewBindBuffer' src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x4dd): undefined reference to `_imp____glewBufferData' src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x50b): undefined reference to `_imp____glewGetBufferParameteriv' src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1d67): undefined reference to `_imp____glewBindBuffer' src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1d7f): undefined reference to `_imp____glewDeleteBuffers' src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1d95): undefined reference to `_imp____glewBindBuffer' src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1dad): undefined reference to `_imp____glewDeleteBuffers' src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x2078): undefined reference to `_imp____glewBindBuffer' collect2: ld returned 1 exit status 

解决这个问题很好但是我想问的方式是否还有其他opengl实现的gl extenten?

您可以尝试GLee ,它与GLEW基本上做同样的事情。

我担心你不能将glew.lib与g ++一起使用(因为.lib是一种专有的Microsoft格式)。 您得到的这些错误缺少函数入口点,这意味着您没有正确编译GLEW(所需的函数不会导出到您的.so中 – 需要了解更多详细信息才能解决此问题)。

至于问题的其他部分,你可以试试GLEH 。 它仍处于开发阶段,可能需要一些调整才能为你工作,但我们已经在linux中成功使用它,所以它不应该太糟糕。

(我知道这有点晚了,但我认为这可能会解决别人的问题,所以)我编译了一个非常类似的问题,编译了一个动态链接到GLEW的程序。 事实certificate,我忽略了libglew32.dll.a文件 – 它也需要存在(除了我之前复制到我的项目文件夹的libglew32.aglew32.dll 。)

奇怪的是没有人说过这件事。 默认情况下,在Windows上,GLEW标头使用declspec(dllimport)表示所有外部函数,这些函数会破坏它们的所有名称。 这就是为什么所有缺少的外部符号名称都在前面都有_imp____

如果你不想使用GLEW的静态版本(你提到了一些关于libglew.a东西), GLEW_STATIC在构建GLEW期间和构建应用程序期间定义GLEW_STATIC 。 这将取消静态链接的名称。

如果要链接到GLEW的共享库版本,请确保使用GLEW_BUILD构建GLEW_BUILD 。 我不确定gcc是否有必要,但是如果库是用MSVC构建的话。

此外,GNU工具链实际上支持Microsoft的.lib格式进行链接。 资源

您可能会发现自己编译GLEW最简单,甚至可以将其包含在项目中。 它只有一个源文件和几个标题。 要手动编译库,请使用gcc -shared -o libGLEW.dll -Wl,--out-implib=libGLEW.dll.a -O2 -DGLEW_BUILD glew.c 要获得静态版本,请使用类似gcc -c -O2 -DGLEW_STATIC glew.c