C++ 使用mingw在窗户上构建glew

C++ 使用mingw在窗户上构建glew,c++,mingw,glew,C++,Mingw,Glew,有人能给我正确的命令在windows上用mingw构建glew吗 我试过: gcc-static glew.c glewinfo.c visualinfo.c-I/path/to/glew/include 但是我收到了数千个链接器错误(缺少引用) 我无法使用Make进行构建,因为很不幸,makefile有很多只支持unix的命令,而我没有cygwin或任何东西在工作 (或者,如果有人能给我指一个windows 32b版本,我将非常感激)我相信main在头版上有一个指向二进制文件的链接,用于和wi

有人能给我正确的命令在windows上用mingw构建glew吗

我试过:

gcc-static glew.c glewinfo.c visualinfo.c-I/path/to/glew/include

但是我收到了数千个链接器错误(缺少引用)

我无法使用Make进行构建,因为很不幸,makefile有很多只支持unix的命令,而我没有cygwin或任何东西在工作


(或者,如果有人能给我指一个windows 32b版本,我将非常感激)

我相信main在头版上有一个指向二进制文件的链接,用于和windows系统。

要使用MinGW构建它,您应该这样做(从制作日志复制,稍加修改和附加说明):

mkdir库/
mkdir-bin/
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
#创建库文件:lib/libglew32.dll.a
ar-cr-lib/libglew32.a src/glew.o
#创建pkg配置文件(如果您只需要一个lib,则可选)
塞德\
-e“s|@prefix@|/usr|g”\
-e“s|@libdir@|/usr/lib|g”\
-e“s|@exec|u prefix@|/usr/bin|g”\
-e“s|@includedir@|/usr/include/GL|g”\
-e“s|@version@|1.6.0|g”\
-e“s|@cflags@|g”\
-e“s|@libname@|GLEW|g”\
glew.pc
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
#创建库文件:lib/libglew32mx.dll.a
ar-cr-lib/libglew32mx.a src/glew.mx.o
#创建pkg配置文件(如果您只需要一个lib,则可选)
塞德\
-e“s|@prefix@|/usr|g”\
-e“s|@libdir@|/usr/lib|g”\
-e“s|@exec|u prefix@|/usr/bin|g”\
-e“s|@includedir@|/usr/include/GL|g”\
-e“s|@version@|1.6.0|g”\
-e“s|@cflags@|-DGLEW|U MX|g”\
-e“s|@libname@|GLEWmx|g”\
glewmx.pc
#制作glew visualinfo程序。如果只需要库,请跳过此选项
gcc-c-O2-Wall-W-Iinclude-o src/glewinfo.o src/glewinfo.c
gcc-O2-Wall-W-Iinclude-o bin/glewinfo.exe src/glewinfo.o-Llib-lglew32-L/mingw/lib-lglu32-lopengl32-lgdi32-luser32-lkernel32
gcc-c-O2-Wall-W-Iinclude-o src/visualinfo.o src/visualinfo.c
gcc-O2-Wall-W-Iinclude-o bin/visualinfo.exe src/visualinfo.o-Llib-lglew32-L/mingw/lib-lglu32-lopengl32-lgdi32-luser32-lkernel32

然后,您应该有一个lib文件夹和一个bin文件夹,其中包含所需的可执行文件和库

找到了另一个使用Code::Blocks的解决方案。步骤:

1) 显然,您需要glew源代码;)

2) 使用C::B打开glew_shared.dsw文件,编辑项目属性,并针对需要的每个构建目标,将其类型从“动态库”更改为“静态库”(就在那里,位于“构建目标”选项卡)。当.dll文件内置到bin\目录中时,也可以更改目标目录

3) 添加#在之前定义GLEW#U静态#包括


4) 构建目标,它将产生适当的libglew32*.a。在PoL0的回答之后,我发现这些步骤在代码::块上对MinGW确实有效,但需要进一步修改-默认项目在“编译器选项”下的“其他选项”中设置了大量microsoft无意义的内容。清除这些选项,您将获得一个好的结果(项目构建选项->每个目标->编译器设置选项卡->其他选项子选项卡)

您可能还希望对两个释放目标(-O2或-O3)进行优化

此外,默认情况下,静态库将构建在“bin”中,您需要复制/移动它们以替换“lib”中的库。

我使用MinGW实现了它,我没有编译glew32mx,而是编译了glew32。只需从GLEW网站下载source.zip。请记住在glew-1.xx目录中创建“lib”目录,否则在尝试编译下面的第二行代码时,它会抱怨“找不到/lib/glew32.dll”:

    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

    # Create glew32.dll
    ar cr lib/libglew32.a src/glew.o

GLEW网站中的预编译二进制文件不适用于mingw,因为我认为它们是用visual studio编译的。

GLEW build system尝试使用
config/configure.guess自动检测您的环境。您可以通过指定要创建的
$SYSTEM
来重载此行为。请参阅
config/Makefile.
了解所有受支持的生成配置。Glew已经包含使用MinGW的配置

因此,您可能只需要启动:

make SYSTEM=linux-mingw64
在我的Fedora上,我不得不调优
config/Makefile.linux-mingw64的一些变量:

  • $CC
    $LD
    不正确
  • 我必须指定系统库所在的目录
  • 我必须指定glew应该安装在哪里
最后,我发起:

make SYSTEM=linux-mingw64                                       \
  CC=x86_64-w64-mingw32-gcc LD=x86_64-w64-mingw32-ld            \
  LDFLAGS.EXTRA=-L/usr/x86_64-w64-mingw32/sys-root/mingw/lib    \
  GLEW_DEST=/usr/x86_64-w64-mingw32/sys-root/mingw install

以下是VLC如何在mingw上构建glew(静态):

(他们使用该补丁)。Guess glew没有简单的选项来“仅仅”构建一个静态库,因此您必须通过各种障碍(或者手动编译,正如其他答案所提到的)

另见

第7步:


mx就是这样做的:(看起来他们基本上只是手动构建所有内容,glew的Makefile似乎很弱…

如果您安装了MingW,只需运行Msys并在那里进行安装,一旦您完成了LIB的复制,并将文件夹包括到bin LIB,并将文件夹包括在MingW中,一切都会正常工作


仅用于Visual C++的简单快速解< /P>。我尝试“reimp”将.lib文件转换为.a文件,但它说它们无效。mingw可以链接到它们的dll,参考:这似乎解决了问题

make SYSTEM=linux-mingw64                                       \
  CC=x86_64-w64-mingw32-gcc LD=x86_64-w64-mingw32-ld            \
  LDFLAGS.EXTRA=-L/usr/x86_64-w64-mingw32/sys-root/mingw/lib    \
  GLEW_DEST=/usr/x86_64-w64-mingw32/sys-root/mingw install