2012-01-15 23 views
8

glew32.libファイルを私のプロジェクトでリンクしようとしましたが、自分でGlewソースをコンパイルしてglew.aファイルを取得していました。今、私は私のプロジェクトでこれらのリンクエラーがあります。GLEWとMinGWの使い方

g++ -o Chapter10(OpenCLTest).exe src\Chapter10(OpenCLTest).o -lopengl32 -lglew -lglut32 -lglu32 -lopencl 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x167): undefined reference to `_imp____glewBindBuffer' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x39a): undefined reference to `_imp__glewInit' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x3a7): undefined reference to `_imp__glewIsSupported' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x48a): undefined reference to `_imp____glewGenBuffers' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x495): undefined reference to `_imp____glewBindBuffer' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x4dd): undefined reference to `_imp____glewBufferData' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x50b): undefined reference to `_imp____glewGetBufferParameteriv' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1d67): undefined reference to `_imp____glewBindBuffer' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1d7f): undefined reference to `_imp____glewDeleteBuffers' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1d95): undefined reference to `_imp____glewBindBuffer' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x1dad): undefined reference to `_imp____glewDeleteBuffers' 
src\Chapter10(OpenCLTest).o:Chapter10(OpenCLTest).cpp:(.text+0x2078): undefined reference to `_imp____glewBindBuffer' 
collect2: ld returned 1 exit status 

この問題を解決することは良いですが、私はお願いしたい方法でGL extentionsの他のOpenGL implementaionsがあるのですか?

+1

g ++でコンパイルしたライブラリを見つけたり、自分でビルドする必要があります。 – Mat

+0

どのコンパイラを使用していますか?どのOS?私はlibファイル(または、私たちが話しているシステムに応じて.so)を見つける場所をコンパイラに指定することが重要であると思います。私はGLEWを使用しています.Linux Boxで1年以上使用されており、すべてが非常に簡単です。私にお知らせください。 –

+0

MinGW(郵便タイトル)Windows 7 – itun

答えて

0

GLeeは、本質的にGLEWと同じことを試すことができます。

5

glew.libをg ++で使用することはできません(.libはMicrosoft独自のフォーマットなので)。これらのエラーには、関数のエントリポイントがありません。つまり、GLEWを正しくコンパイルしていません(必要な関数は.soでエクスポートされません。この問題を解決するには詳細を知る必要があります)。

質問の他の部分については、GLEHを試すことができます。それはまだ開発段階にあり、あなたのために働くためにいくつかの調整が必要かもしれませんが、私たちはLinuxでかなり成功裏に使用していますので、それほど悪くはありません。

2

(これはもう少し遅いと思いますが、他の人の問題を解決するかもしれないと思いました)GLEWに動的にリンクされたプログラムをコンパイルするのと非常に似た問題がありました。それは私がlibglew32.dll.aファイル見落としていたことが判明 - (。libglew32.aglew32.dllに加えて、私は以前に私のプロジェクトフォルダにコピーしていた)も存在することが必要

+0

今私は同じ問題を解決しました。私はそれが解決すべきだと思っていましたが、全面的な再コンパイルプロセスを熱望していませんでした。とにかく、ソースをダウンロードし、mingw(4.8)makeでコンパイルし、それを.exeと同じにコピーしてください。 –

0

奇妙な誰もこのことについては何も言いませんでした。デフォルトでは、GLEWヘッダーはすべての外部関数にdeclspec(dllimport)を使用します。すべての外部関数は、すべての名前を変更します。このため、欠落している外部シンボル名のすべてがすべて_imp____になります。

静的なGLEWビルド(libglew.aについて言及した)を使用したくない場合は、GLEWのビルド中およびアプリケーションのビルド中にGLEW_STATICを定義してください。これにより静的リンクの名前が解消されます。

共有ライブラリバージョンのGLEWにリンクする場合は、GLEW_BUILDでGLEWを構築してください。 gccでこれが必要なのかどうかはわかりませんが、ライブラリがMSVCでビルドされているかどうかはわかりません。

さらに、GNUツールチェーンは実際にはMicrosoftの.lib形式のリンクをサポートしています。 source

自分でGLEWをコンパイルするだけでなく、プロジェクトに組み込むことも簡単です。 1つのソースファイルといくつかのヘッダーだけです。ライブラリを手動でコンパイルするには、gcc -shared -o libGLEW.dll -Wl,--out-implib=libGLEW.dll.a -O2 -DGLEW_BUILD glew.cの行に沿って何かを使用します。静的バージョンを取得するには、代わりにgcc -c -O2 -DGLEW_STATIC glew.cのようなものを使用してください。