問題はタイトルにあります。私がすでに試したことなどを以下にリストしてみます。
まず、私の理解では、Windows で OpenGL 4.0 を使用するには、OpenGL 1.1 のみが出荷されているため、デフォルトの Windows ライブラリを拡張またはバイパスする必要があります。
そのため、MinGW が にインストールされていC:/MinGW/
ます。次に、プロジェクト サイトからtarballをダウンロードして FreeGLUT をセットアップします。コマンドにを少し追加した指示に従って、makefile を実行して抽出およびコンパイルします。--prefix
./configure
./configure --prefix=/c/Users/Owner/root/
make all
make install
今、私は freeglut/c/Users/Owner/root/lib/
などを持ってい/c/Users/Owner/root/include/
ます。次はGLEW、私が知る限りの問題児です。
プロジェクト サイト(直接 1.7.0.zip リンク)からソース アーカイブをダウンロードします。コンパイルはもう少し複雑です。私の現在のレシピは、スタック オーバーフローの質問「mingw を使用して windows で glew を構築する」から派生しています。省略形を以下に示します。
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
ar cr lib/libglew32.a src/glew.o
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
ar cr lib/libglew32mx.a src/glew.mx.o
の「ルート」から実行する必要があります/path/to/glew-1.7.0/
。
これで、ライブラリのセットアップが「完了」しました (間違いがないことを前提としています...)。私の単純なプログラムのコンパイルは、この行で完了します。
${G++} -DFREEGLUT_STATIC -DGLEW_STATIC -m32 main.cpp -o main.exe -lfreeglut_static -lopengl32 -lwinmm -lgdi32 -lglew32 -I ${ROOTPATH}/include -L ${ROOTPATH}/lib --static
ここで、これを少し分解して、さまざまな「余分な」議論がある理由を説明し、すでに遭遇して解決したエラーや問題を示します。
-DFREEGLUT_STATIC
ここでは静的ビルドが必要なため-lfreeglut_static
、通常の代わりに使用されます。-lfreeglut
これを行わないと、freeglut に関連するリンカー エラーが発生します。-DGLEW_STATIC
同じ理由で追加されます。-lwinmm
リンカ エラーを修正するために追加されます:freeglut_init.c:(.text+0x5d9): undefined reference to '_timeBeginPeriod@4'
.-lgdi32
リンカー エラーを修正するために追加されます。c:/Users/Owner/root//lib\libfreeglut_static.a(freeglut_init.o):freeglut_init.c:(.text+0x58c): undefined reference to '_GetDeviceCaps@8'
今、私は次のリンカエラーに困惑しています:
c:/Users/Owner/root//lib\libglew32.a(glew.o):glew.c:(.text+0x83e8): undefined reference to `_glGetString@4'
c:/Users/Owner/root//lib\libglew32.a(glew.o):glew.c:(.text+0xa1b2): undefined reference to `_glGetString@4'
c:/Users/Owner/root//lib\libglew32.a(glew.o):glew.c:(.text+0xa290): undefined reference to `_glGetString@4'
このエラーが発生する最小のテスト ケース ( main.cpp
) は次のとおりです。
#include <GL/glew.h>
#include <GL/freeglut.h>
int main(int argc, char **argv) {
glEnableVertexAttribArray(0);
}
アイデア?