问题在于标题,我将尝试列出我已经尝试过的内容,等等。
首先,根据我的理解,为了在Windows上使用OpenGL 4.0,您必须扩展和/或绕过默认的Windows库,因为它只提供OpenGL 1.1。
所以我们在C:/MinGW/
安装了MinGW。接下来,我从tarball下载project site来设置FreeGLUT。通过根据instructions运行makefile并在--prefix
命令中添加少量./configure
来提取和编译。
./configure --prefix=/c/Users/Owner/root/
make all
make install
现在我在/c/Users/Owner/root/lib/
,/c/Users/Owner/root/include/
中有freeglut,依此类推。接下来是GLEW,就我所知,我的问题孩子。
从the project site(direct 1.7.0.zip link)下载源存档。编译有点复杂,我目前的配方是从堆栈溢出问题“Building glew on windows with mingw”派生的。缩写形式如下:
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
现在稍微分解一下,然后了解为什么我有各种“额外”参数,并向您展示我已经遇到并解决了哪些错误和问题。
-DFREEGLUT_STATIC
和-lfreeglut_static
代替普通-lfreeglut
。不这样做会产生与freeglut相关的链接器错误。 -DGLEW_STATIC
。-lwinmm
来修复链接器错误:freeglut_init.c:(.text+0x5d9): undefined reference to '_timeBeginPeriod@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);
}
想法?
答案 0 :(得分:4)
尝试在该行的最后添加-lopengl32以编译您的程序并查看它是否有帮助。
答案 1 :(得分: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()
。检查核心版本和/或扩展名后,当然:)