编译使用MinGW的,freeglut和GLEW简单的静态的OpenGL 4.0程序(Compili

2019-06-25 20:23发布

问题是在标题,我会尽量列出我已经尝试过,下面等。

首先,在我的理解中,为了在Windows上使用的OpenGL 4.0,你必须扩展和或绕过默认的Windows库,因为它仅船舶的OpenGL 1.1。

因此,我们必须安装在MinGW的C:/MinGW/ 。 通过下载接下来我设置FreeGLUT 压缩包从项目现场 。 提取和通过根据运行的生成文件编译指令与未成年加入--prefix./configure命令。

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

现在,我已经在freeglut /c/Users/Owner/root/lib//c/Users/Owner/root/include/等。 接下来是GLEW,我的问题孩子,据我可以告诉。

请从源存档项目现场 ( 直接1.7.0.zip链接 )。 编译是一点点更复杂,我现在的配方从堆栈溢出问题“衍生大厦GLEW与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

我们分解这个有点穿行为什么我有不同的“额外”的论点,并告诉你什么是错误和问题我已经遇到和解决。

  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);
}

想法?

Answer 1:

尝试添加-lopengl32最后上线编译你的程序,看看是否有帮助。



Answer 2:

参数顺序是显著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()函数指针将是有效的。 检查你的核心版本和/或扩展,当然后:)



文章来源: Compiling Simple static OpenGL 4.0 program using MinGW, freeglut and glew