【问题标题】:Building glew on windows with mingw使用 mingw 在窗户上建造闪光
【发布时间】:2011-05-14 22:06:02
【问题描述】:

谁能给我正确的命令来用mingw在windows上构建glew?

我试过了:

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

但我收到了数千个链接器错误(缺少参考)。

我无法使用 Make 构建,因为不幸的是,makefile 有很多仅适用于 unix 的命令,而我没有 cygwin 或任何工作。

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

【问题讨论】:

  • gcc -shared -O2 -Wl,--out-implib=libglew.dll.a -o libGLEW.dll -Iinclude -DGLEW_BUILD glew.c

标签: c++ mingw glew


【解决方案1】:

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

mkdir lib/
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

# Create library file: lib/libglew32.dll.a
ar cr lib/libglew32.a src/glew.o

# Create pkg-config file (optional if you just want a lib)
sed \
                -e "s|@prefix@|/usr|g" \
                -e "s|@libdir@|/usr/lib|g" \
                -e "s|@exec_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.in > 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

# Create library file: lib/libglew32mx.dll.a
ar cr lib/libglew32mx.a src/glew.mx.o

# Create pkg-config file (optional if you just want a lib)
sed \
                -e "s|@prefix@|/usr|g" \
                -e "s|@libdir@|/usr/lib|g" \
                -e "s|@exec_prefix@|/usr/bin|g" \
                -e "s|@includedir@|/usr/include/GL|g" \
                -e "s|@version@|1.6.0|g" \
                -e "s|@cflags@|-DGLEW_MX|g" \
                -e "s|@libname@|GLEWmx|g" \
                < glew.pc.in > glewmx.pc

# Make the glew visualinfo program. Skip this if you want just the lib
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 文件夹,其中包含所需的可执行文件和库

【讨论】:

  • 这似乎解决了我的错误,但值得注意的是 glew32.dll 出现在 lib 文件夹而不是 bin 文件夹(它是空的)中。也许我应该在命令行上逐行运行它,而不是把它放在一个 .bat 文件中,但正如我所说,它似乎可以工作。
  • 我收到以下错误 libglew32.dll: No such file or directory lib/libglew32.dll.a: No such file or directory unrecognized option -soname unrecognized option --out-implib,知道为什么吗?
  • 好的,我不知道我应该在 MSYS 下运行它 - 它可以工作
  • 这完全可行,谢谢。为什么 GLEW 开发人员不这么多暗示这一点? Windows == VS 对他们来说。
  • 我必须在包含 gcc -shared 的 2 指令中在 -shared 前面使用 -nostdlib 才能使其与 msys 一起使用
【解决方案2】:

我让它工作(使用 MinGW),我没有编译 glew32mx 而是编译 glew32。只需从 GLEW 网站下载源 .zip。并且记得在glew-1.xx目录下创建“lib”目录,否则编译下面第二行代码时会报“can't find /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 编译的。

【讨论】:

【解决方案3】:

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

1) 显然你需要 glew 源代码;)

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

3) 在#include 之前添加#define GLEW_STATIC

4) 构建目标,它将导致创建正确的 libglew32*.a

【讨论】:

  • #define GLEW_STATIC 需要在包含 glew.h 之前添加!谢谢
【解决方案4】:

Glew 构建系统尝试使用 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

【讨论】:

    【解决方案5】:

    进一步了解 PoL0 的答案,我发现这些步骤对我使用 MinGW on Code::Blocks 确实有效,但需要进一步更改 - 默认项目在编译器选项下的“其他选项”中设置了很多微软废话。清除这些,你会有一个好的结果(项目构建选项 -> [每个目标] -> 编译器设置选项卡 -> 其他选项子选项卡)

    您可能还希望为两个发布目标(-O2 或 -O3)启用优化。

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

    【讨论】:

      【解决方案6】:

      以下是 VLC 在 mingw 上构建 glew(静态)的方式:

      https://github.com/videolan/vlc/tree/master/contrib/src/glew(他们应用了那个补丁)。 Guess glew 没有简单的选择来“仅仅”构建一个静态库,所以你必须经历各种障碍(或者手动编译,正如其他答案所暗示的那样)。

      另见http://en.wikibooks.org/wiki/OpenGL_Programming/Installation/Windows#GLEW

      这里是第 7 步:http://sujatha-techie.blogspot.com/2008/10/glsl-with-mingw.html

      这就是 mx 的做法:https://github.com/mxe/mxe/blob/master/src/glew.mk(看起来他们基本上只是手动构建所有内容,glew 的 Makefile 似乎很弱......)

      【讨论】:

        【解决方案7】:

        我相信主要的Glew website 有一个指向首页上二进制文件的链接,用于32-bit64-bit windows 系统。

        【讨论】:

        【解决方案8】:

        如果您安装了 MingW,只需运行 Msys 并在您完成将库和包含文件夹复制到 bin 库并在 MingW 中包含文件夹后进行安装,它应该一切正常

        简单快速的解决方案

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-15
          • 2016-02-26
          • 2012-01-30
          • 2011-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多