如何使用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.a
和glew32.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
。