使用 mingw32 在 Windows 上构建 glew

问题描述 投票:0回答:4

这是重复的,我对此感到抱歉,但我没有任何其他选择,因为我无法对答案发表评论,而且他们没有解决我的问题。以下是原帖:

使用 mingw 在 Windows 上构建 glew

这是我的问题:

1)当我尝试@LightningIsMyName 的答案时,我收到此错误:

Makefile:1: *** 缺少分隔符。停下来。

2)当我尝试@anon 的答案时,我收到此错误:

Makefile:1: Makefile:1: *** 命令在第一个目标之前开始。停下来。

人们说这个答案对他们有帮助,但对我不起作用。我抱歉我以某种方式重复了一个问题,但由于声誉限制,我没有其他机会发表评论。希望你能帮忙。谢谢。

c++ opengl makefile glew
4个回答
9
投票

为了找到问题的答案,我进行了多次搜索。花了很多时间,所以我将其发布在这里以帮助其他人。

要使 GLEW 与 MinGW 配合使用,您应该从 GLEW 网站下载源代码并放入

来自 MinGW 的 gcc.exe
ar.exe 来自 MinGW32\mingw32 in

到 GLEW 的源文件夹并在该文件夹中创建并运行 .bat,如下所示:

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 和 .a 文件。将.dll文件放入system32文件夹并将.a文件放入MinGW lib文件夹。

最后,如果您使用 SFML,请在 GLEW 之前链接 SFML 库,最后链接 OpenGL。如果更改链接顺序,您将收到链接器错误。

创建窗口后不要忘记调用 glewInit()。


2
投票

尝试这些命令:
1:

gcc -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.o -c src/glew.c

2:
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

3:
ar cr lib/libglew32.a src/glew.o


2
投票

如果你不能以这种方式工作,请尝试我的(对于 Borland 编译器):

  1. 下载GLEW源代码(不是二进制文件)

    • glew.c
      我的源代码是~900KB(我认为是GLEW 1.6)
    • glew.h
      我的标头约为 900KB(我认为 GLEW 1.6)
  2. 我使用本地项目路径来存储GLEW

    我知道这是多余的,但我不需要在系统更改后进行更改,例如重新安装操作系统或新的编译器版本等...但要使其工作,您需要在内部进行一些更改

    glew.c

    • #include <glew.h>
      更改为
      #include "glew.h"

    如果您想使用全局路径,请将其添加到编译器中,将文件复制到那里并保持原样

    <>

  3. 将这2个文件复制到您的项目中

    这是如何正确地将其包含到项目中,只需将其添加到您的主源文件(您的 winmain 或 main 函数所在的位置):

    #include <windows.h> // optional windows
    #include <math.h>    // optional
    #define GLEW_STATIC  // this configure header and source of GLEW to compile correctly 
    #include "glew.c"    // header is included inside so no need to duplicate include
    // here are the OpenGL includes like: gl.h,glext.h,....
    
  4. 现在应该可以工作了

    不要忘记在 OpenGL 初始化之后和使用任何扩展之前调用

    glewInit();
    ...


0
投票

来自 https://github.com/nigels-com/glew/issues/223

mkdir lib/
mkdir bin/
gcc -DGLEW_NO_GLU -O2 -Wall -W -Iinclude -DGLEW_BUILD -o src/glew.o -c src/glew.c
gcc -nostdlib -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 -nostdlib -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

这个对我来说适用于 mingw32 的 glew v2.1.0。 将其制作成批处理文件并以管理员身份在cmd Windows中执行它。没有给我任何重复的声明错误消息。

© www.soinside.com 2019 - 2024. All rights reserved.