5

問題はタイトルにあります。私がすでに試したことなどを以下にリストしてみます。

まず、私の理解では、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

ここで、これを少し分解して、さまざまな「余分な」議論がある理由を説明し、すでに遭遇して解決したエラーや問題を示します。

  1. -DFREEGLUT_STATICここでは静的ビルドが必要なため-lfreeglut_static、通常の代わりに使用されます。-lfreeglutこれを行わないと、freeglut に関連するリンカー エラーが発生します。
  2. -DGLEW_STATIC同じ理由で追加されます。
  3. -lwinmmリンカ エラーを修正するために追加されます: freeglut_init.c:(.text+0x5d9): undefined reference to '_timeBeginPeriod@4'.
  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);
}

アイデア?

4

2 に答える 2

4

-lopengl32 を行の最後に追加して、プログラムをコンパイルし、それが役立つかどうかを確認してください。

于 2012-07-03T12:06:54.710 に答える
1

gccリンカー オプションでは、引数の順序が重要です。

これを試して:

${G++} -DFREEGLUT_STATIC -DGLEW_STATIC -m32 main.cpp -o main.exe -I ${ROOTPATH}/include -L ${ROOTPATH}/lib -lopengl32 -lwinmm -lgdi32 -lglew32 -static -lfreeglut_static 

--staticまた、二重ダッシュのオプションはないと思います-static

そしてwin32では、関数ポインタが有効になるglewInit()前に成功する必要があります。glEnableVertexAttribArray()もちろん、コアバージョンや拡張機能を確認した後:)

于 2012-06-27T20:44:47.520 に答える