5

问题出在标题中,我将尝试在下面列出我已经尝试过的内容,依此类推。

首先,据我了解,为了在 Windows 上使用 OpenGL 4.0,您必须扩展或绕过默认的 Windows 库,因为它仅提供 OpenGL 1.1。

所以我们在C:/MinGW/. 接下来我通过从项目站点下载tarball来设置 FreeGLUT 。通过根据指令运行生成文件并在命令中添加少量内容来提取和编译。--prefix./configure

./configure --prefix=/c/Users/Owner/root/
make all
make install 

现在我有 freeglut in /c/Users/Owner/root/lib//c/Users/Owner/root/include/等等。接下来是 GLEW,据我所知,我的问题孩子。

从项目站点下载源存档(直接 1.7.0.zip 链接)。编译有点复杂,我目前的配方来自堆栈溢出问题“使用 mingw 在 Windows 上构建 glew ”。下面列出了一个缩写形式:

mkdir lib/
mkdir bin/
gcc -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.o -c src/glew.c
gcc -shared -Wl,-soname,libglew32.dll -Wl,--out-implib,lib/libglew32.dll.a -o lib/glew32.dll src/glew.o -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32
ar cr lib/libglew32.a src/glew.o
gcc -DGLEW_NO_GLU -DGLEW_MX -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.mx.o -c src/glew.c
gcc -shared -Wl,-soname,libglew32mx.dll -Wl,--out-implib,lib/libglew32mx.dll.a -o lib/glew32mx.dll src/glew.mx.o -L/mingw/lib -lglu32 -lopengl32 -lgdi32 -luser32 -lkernel32
ar cr lib/libglew32mx.a src/glew.mx.o

并且应该从/path/to/glew-1.7.0/.


现在通过“完成”库的设置(假设没有错误......)编译我的简单程序是用这一行完成的。

${G++}  -DFREEGLUT_STATIC -DGLEW_STATIC -m32 main.cpp -o main.exe -lfreeglut_static -lopengl32 -lwinmm -lgdi32 -lglew32  -I ${ROOTPATH}/include -L ${ROOTPATH}/lib --static

现在稍微分解一下,并解释为什么我有各种“额外”的论点,并向您展示我已经遇到并解决了哪些错误和问题。

  1. -DFREEGLUT_STATIC-lfreeglut_static使用而不是正常使用,-lfreeglut因为我们想要在这里进行静态构建。不这样做会导致与 freeglut 相关的链接器错误。
  2. -DGLEW_STATIC出于同样的原因添加。
  3. -lwinmm添加以修复链接器错误:freeglut_init.c:(.text+0x5d9): undefined reference to '_timeBeginPeriod@4'.
  4. -lgdi32添加以修复链接器错误:c:/Users/Owner/root//lib\libfreeglut_static.a(freeglut_init.o):freeglut_init.c:(.text+0x58c): undefined reference to '_GetDeviceCaps@8'

现在我被以下链接器错误难住了:

c:/Users/Owner/root//lib\libglew32.a(glew.o):glew.c:(.text+0x83e8): undefined reference to `_glGetString@4'
c:/Users/Owner/root//lib\libglew32.a(glew.o):glew.c:(.text+0xa1b2): undefined reference to `_glGetString@4'
c:/Users/Owner/root//lib\libglew32.a(glew.o):glew.c:(.text+0xa290): undefined reference to `_glGetString@4'

产生此错误 ( ) 的最小测试用例main.cpp是。

#include <GL/glew.h>
#include <GL/freeglut.h>

int main(int argc, char **argv) {
  glEnableVertexAttribArray(0);
}

想法?

4

2 回答 2

4

尝试在最后一行添加 -lopengl32 以编译您的程序,看看它是否有帮助。

于 2012-07-03T12:06:54.710 回答
1

参数顺序对于gcc链接器选项很重要。

试试这个:

${G++} -DFREEGLUT_STATIC -DGLEW_STATIC -m32 main.cpp -o main.exe -I ${ROOTPATH}/include -L ${ROOTPATH}/lib -lopengl32 -lwinmm -lgdi32 -lglew32 -static -lfreeglut_static 

另外,我认为没有双破折号--static选项,只是-static.

在 win32 上,你需要一个成功glewInit()glEnableVertexAttribArray()函数指针才能有效。在检查您的核心版本和/或扩展之后,当然:)

于 2012-06-27T20:44:47.520 回答