8

我试图使用 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

解决这个问题很好,但顺便问一下,还有其他的 gl 扩展的 opengl 实现吗?

4

4 回答 4

5

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

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

于 2012-01-15T18:31:15.913 回答
2

(我知道这有点晚了,但我认为它可能会解决其他人的问题,所以)我在编译一个动态链接到 GLEW 的程序时遇到了一个非常相似的问题。事实证明,我忽略了该libglew32.dll.a文件 - 该文件也需要存在(此外libglew32.aglew32.dll我之前已复制到我的项目文件夹中。)

于 2013-10-23T07:53:23.103 回答
1

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

于 2012-01-15T18:41:28.823 回答
0

奇怪的是,没有人对此说过任何话。默认情况下,在 Windows 上,GLEW 标头declspec(dllimport)用于所有外部函数,这会破坏它们的所有名称。这就是为什么所有缺少的外部符号名称都_imp____在前面的原因。

如果您不想使用 GLEW 的静态构建(您提到了一些关于的内容libglew.a),GLEW_STATIC请在 GLEW 构建期间和应用程序构建期间进行定义。这将解开静态链接的名称。

如果您想链接到 GLEW 的共享库版本,请确保使用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

于 2015-05-06T05:11:52.350 回答