nix*_*gle 5 c++ opengl winapi glew freeglut
问题在于标题,我将尝试列出我已经尝试过的内容,等等.
首先,根据我的理解,为了在Windows上使用OpenGL 4.0,您必须扩展和/或绕过默认的Windows库,因为它只提供OpenGL 1.1.
所以我们安装了MinGW C:/MinGW/.接下来,我通过从项目站点下载tarball来设置FreeGLUT .提取和通过根据运行的生成文件编译指令与未成年人加入到命令.--prefix./configure
./configure --prefix=/c/Users/Owner/root/
make all
make install
Run Code Online (Sandbox Code Playgroud)
现在我有freeglut /c/Users/Owner/root/lib/,/c/Users/Owner/root/include/等等.接下来是GLEW,就我所知,我的问题孩子.
从项目站点下载源存档(直接1.7.0.zip链接).编译有点复杂,我目前的配方来自堆栈溢出问题" 用mingw构建窗口上的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
Run Code Online (Sandbox Code Playgroud)
并应该从"根"运行/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
Run Code Online (Sandbox Code Playgroud)
现在稍微分解一下,然后了解为什么我有各种"额外"参数,并向您展示我已经遇到并解决了哪些错误和问题.
-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'
Run Code Online (Sandbox Code Playgroud)
产生此错误(main.cpp)的最小测试用例是.
#include <GL/glew.h>
#include <GL/freeglut.h>
int main(int argc, char **argv) {
glEnableVertexAttribArray(0);
}
Run Code Online (Sandbox Code Playgroud)
想法?