1

GLEWを介してOpenGL拡張関数を呼び出している静的ライブラリがあります。プロジェクトはGCC(NetBeans 7.0)でビルドされており、GLEWのバイナリはVisual-Cフレーバーでのみ出荷されるため、GCCを使用して静的ライブラリとしてGLEW(1.7.0)をビルドしました。(GLEWは純粋なCのようであり、ABIとクロスコンパイラの互換性は問題ではないので、なぜこれが必要なのかについても興味があります。)

静的ライブラリで、GLEW_STATICとNO_SDL_GLEXTをプロジェクトプリプロセッサディレクティブ(-D)として定義してから、

#include "GL/glew.h"
#include "SDL/SDL.h"

次に、静的ライブラリは(テスト)アプリケーションでリンクされます。このアプリケーションは、次の順序で次のライブラリにもリンクします。

my_static_library
mingw32
glew32
opengl32
SDLmain
SDL

この設定により、静的ライブラリに2つの未定義の参照エラーが発生します。

undefined reference to `_imp____glewGetStringi'
undefined reference to `_imp__glewInit'

実際、これらは静的ライブラリでGLEW機能に対して行われる2つの呼び出しです。ただし、リンカが(-DGLEW_STATICの前に)不平を言っていた他の呼び出しがありますが、現在は問題ないようです。

リンケージの順序をopengl32とglew32(wgl...呼び出しに対するいくつかの未定義の参照)に入れ替えても、状況を改善できませんでした。さらに、GLEW_STATIC(およびNO_SDL_GLEXT)は、以前はテストアプリケーションで定義されていましたが、削除されており、問題ではないようです。

残りのエラーが発生するのはなぜですか?それらを取り除くために何ができますか?つまり、SDLを使用してGCCでGLEWを使用するにはどうすればよいですか?

4

1 に答える 1

1

_imp____glewGetStringiライブラリは、DLLバージョンのGLEWにリンクするように構築されており、_imp__glewInitライブラリシンボルをインポートします。つまり、定義の組み合わせにより、コンパイル時に次の行が表示されます。

extern __declspec(dllimport) PFNGLGETSTRINGIPROC __glewGetStringi;

GLEW_STATICこれは、ライブラリのコンパイル中に定義しない場合に発生する可能性があります(ただし、定義します。各オブジェクトを再確認してください)。

また

お使いのバージョンのGLEWには、ヘッダーにバグがあります。GLEW 1.7.0では、期待どおりに機能します。

于 2011-11-14T10:11:11.807 に答える