使用 MinGW 在 Windows 上构建 GLEW 1.7.0

Posted

技术标签:

【中文标题】使用 MinGW 在 Windows 上构建 GLEW 1.7.0【英文标题】:Building GLEW 1.7.0 on Windows using MinGW 【发布时间】:2012-05-10 13:11:52 【问题描述】:

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

更多信息:我正在使用 QtCreator,因此使用 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 中的 LIBS 路径和​​ Windows 路径变量,以包含 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】:

好的,我解决了。

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

对于遇到相同问题的任何人:

    从GLEW homepage下载源代码(.zip) 编译源码,有不同的方法(参见初始问题中的链接) -> 见底部(旧的批处理文件不再在 github 上) 将 .dll.a 文件放在一个目录中,该目录将成为 qmake 中 LIBS 路径的一部分 将 .dll 文件放入系统变量 PATH 的目录中 不要忘记在您的 qmake 项目文件中链接 opengl、glu、glew

这是我的项目文件的 sn-p:

#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"

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

干杯, 莫里茨


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

    确保 ar.exe 和 gcc.exe 在您的路径中。对于“QtSDK 标准安装”,这些程序可以在 C:\QtSDK\mingw\bin 找到;

    将以下行放入 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
    

    运行批处理文件。结果将在 lib/ 文件夹中。生成的 .dll 和 .dll.a 文件放在一起(.dll.a 是您要告诉链接器的内容,.dll 应该在运行时对系统可用)。 .a 文件用于静态链接。

【讨论】:

感谢您的提示,我详细说明了答案并接受了。 我编辑了答案以删除损坏的链接并替换丢失的信息。希望它现在不会太混乱。

以上是关于使用 MinGW 在 Windows 上构建 GLEW 1.7.0的主要内容,如果未能解决你的问题,请参考以下文章

使用 GLee 构建错误(GL Easy Extension Library)

`DllMainCRTStartup@12' 的多重定义,同时使用 mingw32 在 Windows 上构建 glew

调试使用 mingw/msys2 构建的 Windows 服务

如何使用 MinGW 在 Linux 上构建 Crypto++ 库?

MinGW 在 Windows 上制作

如何在 mingw64 上使用 boost.test 构建测试?