问题出在标题中,我将尝试在下面列出我已经尝试过的内容,依此类推。
首先,据我了解,为了在 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
现在稍微分解一下,并解释为什么我有各种“额外”的论点,并向您展示我已经遇到并解决了哪些错误和问题。
-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);
}
想法?