使用MinGW在Windows上构建GLEW 1.7.0

时间:2012-05-10 13:11:53

标签: mingw glew

之前有很多问题:如何使用MinGW在Windows上编译GLEW 1.7.0源代码?目标是从c ++项目动态链接库。

更多信息:我正在使用QtCreator,ergo使用qmake进行构建。我在Windows 7上。到目前为止,我已经尝试/查看了以下链接。

use posted batch file also tried to replace gcc with g++

static with vc++ libs, build dll.a reuse vc++ .dll

Get MSYS run shipped makefile

Info on initial issues

simple stuff using GLEW msvc++ binaries, works on my desktop

当我在项目中使用已编译的结果时,不幸的是所有发布的解决方案都会在以下错误消息中结束:

undefined reference to `glDrawElements@16'
debug/Ex04.o: In function `Z6initGLv':
undefined reference to `glClearColor@16'
undefined reference to `glEnable@4'
debug/Ex04.o: In function `Z8updateGLv':
undefined reference to `glClear@4'
undefined reference to `glViewport@16'
collect2: ld returned 1 exit status
mingw32-make.exe[1]: *** [debug/ecg4.exe] Error 1
mingw32-make.exe: *** [debug] Error 2

我对这个问题的斗智尽头。我已经对qmake和windows path变量中的LIBS路径进行了两次和三次检查,以包含glew dll所在的目录。 qmake的INCLUDEPATH也应该没问题。这里是.pro文件中的路径:

LIBS += -L$$quote(C:/mypath/freeglut/lib/) -lfreeglut
LIBS += -L$$quote(C:/mypath/glew-1.7.0/lib/) -lglew32 -lglew32mx
#LIBS+= C:/mypath/glew-1.7.0/lib/libglew32.dll.a
#LIBS+= C:/Programming/glew-1.7.0/lib/libglew32mx.dll.a

#includepath for project and the required libraries
INCLUDEPATH += ./include
INCLUDEPATH += "C:/mypath/glew-1.7.0/include"
INCLUDEPATH += "C:/mypath/freeglut/include"

那么是否有人可以提供一套关于如何使用MinGW编译GLEW 1.7.0源代码的简单说明?

1 个答案:

答案 0 :(得分:12)

好的,我解决了。

据我所知,基本上我正确地编译了GLEW。我忘了在项目的LIBS路径中添加 -lopengl32 -lglu32 。出于某种原因,我需要在我的Qt / MinGW / Windows系统上执行此操作。在我的桌面上:Qt / VC ++ / Windows我不必这样做。有人对此有解释吗?

对于遇到同样问题的人:

  1. GLEW homepage
  2. 下载源代码(.zip)
  3. 编译来源,有不同的方式(参见初始问题中的链接)
    - >看到底部(旧的批处理文件不再在github上了)
  4. 将.dll.a文件放在一个目录中,该目录将成为qmake中LIBS路径的一部分
  5. 将.dll文件放入一个目录,该目录是systemvariable PATH
  6. 的一部分
  7. 不要忘记在qmake项目文件中链接opengl,glu,glew
  8. 以下是我的项目文件的片段:

    #Required Libraries, replace with your path
    # $$quote(...) for quoting pathes with spaces
    
    LIBS += -L$$quote(C:/Programming/freeglut/lib/) -lfreeglut
    LIBS += -L$$quote(C:/Programming/glew-1.7.0/lib/) -lglew32 -lglew32mx
    # the following line is not necessary when working with VS compiler, odd
    LIBS += -lopengl32 -lglu32
    
    #includepath for project and the required libraries
    INCLUDEPATH += ./include
    INCLUDEPATH += "C:/Programming/glew-1.7.0/include"
    INCLUDEPATH += "C:/Programming/freeglut/include"
    

    无论如何非常感谢,也许这有助于一些人不要忘记依赖:)

    干杯, Moritz的


    <强> 编辑: 批处理文件不再用了,我只需要编译glew 1.9.0。所以这里有一些进一步的说明:

    1. 确保路径中包含ar.exe和gcc.exe。对于“QtSDK标准安装”,可以在C:\ QtSDK \ mingw \ bin;
    2. 找到这些程序。
    3. 将以下行放入glew-1.x.y文件夹中的批处理文件中。这是LightningIsMyName's Answer

      的精简版
      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
      
    4. 运行批处理文件。结果将在lib /文件夹中。生成的.dll和.dll.a文件放在一起(.dll.a是您想要告诉链接器的内容,.dll应该在运行时可供系统使用)。 .a文件用于静态链接。