新手:如何学习如何用MinGW构建GLEW?

Novice: How can I learn how to build GLEW with MinGW?

本文关键字:MinGW 何用 构建 GLEW 学习 何学习 新手      更新时间:2023-10-16

我是一个使用Windows的愚蠢的C/C++新手,通过控制台使用MinGW构建。我一直在寻找如何构建 GLEW 的日子,以便我可以静态地将其与我非常简单的 SDL+OpenGL 程序链接起来。对于静态链接,GLEW 除了 lglew32 之外,应该需要一个特殊的库,称为 lglew32s,这是我无法得到的。

我现在正在尝试学习使用 gcc/g++,并了解选项和整个预处理/编译/链接的事情。我在那里大约 5%。我在网上找到了一些 GLEW 构建批处理文件示例,大多数都很旧,但即使是其中一个新的也没有为我编译 lglew32s,所以我可以动态链接,但我不能静态链接。

因此,因为我在网上找不到 glew32s.lib 之外用 VS 以外的任何东西构建,所以我必须学会理解这意味着什么,并以某种方式弄清楚如何使用我从中学到的东西编译 glew32s:

gcc.exe -DGLEW_NO_GLU -O2 -Wall -W -Iinclude  -DGLEW_BUILD -o src/glew.o -c src/glew.c
gcc.exe -fno-builtin -fno-stack-protector -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 -nostdlib
ar.exe cr lib/libglew32.a src/glew.o
gcc.exe -DGLEW_NO_GLU -DGLEW_MX -O2 -Wall -W -Iinclude  -DGLEW_BUILD -o src/glew.mx.o -c src/glew.c
gcc.exe  -fno-builtin -fno-stack-protector -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 -nostdlib
ar.exe cr lib/libglew32mx.a src/glew.mx.o

我已经学会了使用 gcc/g++ 编译自己的 .cpp 和 .c 项目(就实际代码而言,我几乎没有脱离"hello world"阶段),以及如何将它们动态链接到 SDL 和 GLEW 库。我现在非常明白这一切意味着什么:

g++ sdlglew.cpp -o sdlglew -Wall -lmingw32 -lSDL2main -lSDL2 -lglew32 -lopengl32 -I "C:SDL2-2.0.9i686-w64-mingw32includeSDL2" -L "C:SDL2-2.0.9i686-w64-mingw32lib" -mwindows

(我的 SDL 内容在自己的目录中关闭了。GLEW 的标题和库在 MinGW 的目录中)

我想我需要在我的命令中DGLEW_STATIC或在我的 sdlglew 中 #define GLEW_STATIC.cpp静态编译 GLEW,但是那些带有 lglew32 的选项在编译时没有给我任何错误,并且由于缺少 glew32.dll而无法启动。编译器会使用 -static 吐出错误,因为尚未为其设置 SDL。

基本上,如果您有任何资源来了解上述编译脚本每行到底在做什么以及如何构建 glew32s,我会非常高兴:S 我想理解它,但似乎真的没有关于我们的新手的文档

你不能使用Makefile吗?(我认为它应该包含在MinGW版本中)

在这种情况下,我认为您应该能够执行以下操作:

cd thefolderwithmakefile
make all GLEW_STATIC=1

然后,当您构建项目文件时,还需要定义GLEW_STATIC(如-DGLEW_STATIC#define GLEW_STATIC所述)。