簡體   English   中英

使用 mingw 在 windows 上構建 glew

[英]Building glew on windows with mingw

誰能給我正確的命令來使用 mingw 在 windows 上構建 glew?

我試過了:

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

但我收到了數千個 linker 錯誤(缺少參考)。

我不能用 Make 構建,因為不幸的是 makefile 有很多 unix 只有命令,我沒有 cygwin 或任何工作。

(或者,如果有人能指出我的 windows 32b 版本,我將不勝感激)

要使用 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 文件夾,其中包含所需的可執行文件和庫

我讓它工作(使用 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 構建系統嘗試使用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

找到了另一個適用於 Code::Blocks 的解決方案。 腳步:

1) 顯然你需要 glew 源代碼;)

2) 使用 C::B 打開 glew_shared.dsw 文件,編輯項目屬性,對於您需要的每個構建目標,將其類型從“動態庫”更改為“靜態庫”(它就在那里,在構建目標選項卡上)。 您還可以更改目標目錄,因為 dll 文件內置在 bin\ 目錄中。

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

4) 構建目標,這將導致創建正確的 libglew32*.a

對於 PoL0 的回答,我發現這些步驟確實適用於 MinGW on Code::Blocks,但需要進一步更改——默認項目在編譯器選項下的“其他選項”中設置了很多微軟的廢話。 清除這些,你會得到一個好的結果(項目構建選項 -> [每個目標] -> 編譯器設置選項卡 -> 其他選項子選項卡)

您可能還希望為兩個發布目標(-O2 或 -O3)啟用優化。

此外,static 庫將默認構建在“bin”中,您需要復制/移動它們以替換“lib”中的庫。

以下是 VLC 如何在 mingw 上構建 glew(靜態):

https://github.com/videolan/vlc/tree/master/contrib/src/glew (他們應用了那個補丁)。 猜猜 glew 沒有簡單的選擇來“只”構建一個 static 庫,所以你必須 go 通過各種障礙(或手動編譯,正如其他答案所暗示的那樣)。

另見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 似乎很弱......)

如果您安裝了 MingW,只需運行 Msys 並在那里進行安裝,一旦您完成復制庫並將文件夾包含到 bin 庫中並在 MingW 中包含文件夾,它應該一切正常

簡單快速的解決方案

我相信主要的Glew 網站在首頁上有一個指向二進制文件的鏈接,適用於32 位64 位windows 系統。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM