【发布时间】:2019-09-07 03:37:53
【问题描述】:
我是一个使用 Windows 的愚蠢 C/C++ 新手,通过控制台使用 MinGW 构建。我一直在寻找如何构建 GLEW 以便我可以将它与我非常简单的 SDL+OpenGL 程序静态链接。对于静态链接,据说 GLEW 需要一个除 lglew32 之外的名为 lglew32s 的特殊库,而这是我无法掌握的。
我现在正在尝试学习使用 gcc/g++,并总体上了解选项和整个预处理/编译/链接的事情。我大约有5%。我在网上找到了一些 GLEW 构建批处理文件示例,大多数都很旧,但即使其中一个是新的也没有为我编译 lglew32s,所以我可以动态链接但我不能静态链接。
因此,因为我无法在任何在线上找到使用 VS 以外的任何东西构建的 glew32s.lib,我必须学会理解这意味着什么,并以某种方式弄清楚如何使用我从中学到的东西来编译 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.9\i686-w64-mingw32\include\SDL2" -L "C:\SDL2-2.0.9\i686-w64-mingw32\lib" -mwindows
(我的 SDL 东西在它自己的目录中。GLEW 的头文件和库在 MinGW 的目录中)
我认为我需要在我的命令中使用 -DGLEW_STATIC 或在我的 sdlglew.cpp 中使用 #define GLEW_STATIC 来静态编译 GLEW,但是带有 lglew32 的那些选项在编译时没有给我任何错误,并且由于缺少 glew32.dll 而无法启动。编译器使用 -static 会出现错误,因为尚未为其设置 SDL。
基本上,如果您有任何资源来了解所提到的编译脚本每行的确切作用以及我如何构建 glew32s,我会非常高兴:SI 想了解它,但似乎真的没有文档对我们新手来说吧
【问题讨论】:
-
请注意,该副本上接受的答案似乎不必要地复杂,并且不会导致静态构建。 (一些投票率较低的答案似乎可以提供一些很好的建议)