7

これまでにかなりの質問がありました。MinGWを使用してWindowsでGLEW1.7.0ソースをコンパイルするにはどうすればよいですか。目標は、c++プロジェクトからライブラリに対して動的にリンクすることです。

詳細:私はQtCreatorを使用していますが、ergoはqmakeを使用してビルドしています。私はWindows7を使用しています。これまでに、次のリンクを試してみました。

投稿されたバッチファイルを使用して、gccをg++に置き換えようとしました

vc ++ libsで静的、dll.aをビルドしますvc++.dllを再利用します

MSYSで出荷されたmakefileを実行する

初期の問題に関する情報

GLEW msvc ++バイナリを使用した単純なもので、デスクトップで動作します

残念ながら、プロジェクトでコンパイルされた結果を使用すると、投稿されたすべてのソリューションが次のエラーメッセージで終了します。

undefined reference to `glDrawElements@16'
debug/Ex04.o: In function `Z6initGLv':
undefined reference to `glClearColor@16'
undefined reference to `glEnable@4'
debug/Ex04.o: In function `Z8updateGLv':
undefined reference to `glClear@4'
undefined reference to `glViewport@16'
collect2: ld returned 1 exit status
mingw32-make.exe[1]: *** [debug/ecg4.exe] Error 1
mingw32-make.exe: *** [debug] Error 2

私はこの問題に関する私の知恵の終わりにいます。qmakeのLIBSパスとWindowsパス変数をダブルおよびトリプルチェックして、glewdllが存在するディレクトリを含めました。また、qmakeのINCLUDEPATHは問題ないはずです。とにかく.proファイルのパスは次のとおりです。

LIBS += -L$$quote(C:/mypath/freeglut/lib/) -lfreeglut
LIBS += -L$$quote(C:/mypath/glew-1.7.0/lib/) -lglew32 -lglew32mx
#LIBS+= C:/mypath/glew-1.7.0/lib/libglew32.dll.a
#LIBS+= C:/Programming/glew-1.7.0/lib/libglew32mx.dll.a

#includepath for project and the required libraries
INCLUDEPATH += ./include
INCLUDEPATH += "C:/mypath/glew-1.7.0/include"
INCLUDEPATH += "C:/mypath/freeglut/include"

それで、MinGWでコンパイルされたGLEW 1.7.0ソースを取得する方法についての絶対確実な一連の指示を与えることができる誰かがそこにいますか?

4

1 に答える 1

13

わかりました、解決しました。

基本的に、私が見る限り、GLEWを正しくコンパイルしました。プロジェクトのLIBSパスに-lopengl32-lglu32を追加するのを忘れました。何らかの理由で、Qt / MinGW/Windowsシステムでこれを行う必要があります。デスクトップの場合:Qt / VC ++/Windowsこれを行う必要はありません。誰かがそれについての説明がありますか?

同じ問題に遭遇した人のために:

  1. GLEWホームページからソース(.zip)をダウンロード
  2. ソースをコンパイルします。さまざまな方法があります(最初の質問のリンクを参照)
    ->下部を参照(古いバッチファイルはもうgithubにありません)
  3. qmakeのLIBSパスの一部となるディレクトリに.dll.aファイルを配置します
  4. .dllファイルをsystemvariablePATHの一部であるディレクトリに配置します
  5. qmakeプロジェクトファイルでopengl、glu、glewとリンクすることを忘れないでください

これが私のプロジェクトファイルのスニペットです:

#Required Libraries, replace with your path
# $$quote(...) for quoting pathes with spaces

LIBS += -L$$quote(C:/Programming/freeglut/lib/) -lfreeglut
LIBS += -L$$quote(C:/Programming/glew-1.7.0/lib/) -lglew32 -lglew32mx
# the following line is not necessary when working with VS compiler, odd
LIBS += -lopengl32 -lglu32

#includepath for project and the required libraries
INCLUDEPATH += ./include
INCLUDEPATH += "C:/Programming/glew-1.7.0/include"
INCLUDEPATH += "C:/Programming/freeglut/include"

とにかくたくさんありがとう、多分これは何人かの人々が依存関係を忘れないのを助けるでしょう:)

乾杯、モリッツ


編集: バッチファイルはもう起動しておらず、glew1.9.0をコンパイルする必要がありました。だからここにいくつかのさらなるメモがあります:

  1. ar.exeとgcc.exeがパス上にあることを確認してください。「QtSDK標準インストール」の場合、これらのプログラムはC:\ QtSDK \ mingw\binにあります。
  2. 次の行をglew-1.xyフォルダーのバッチファイルに入れます。これはLightningIsMyNameの回答の要約版です

    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
    
  3. バッチファイルを実行します。結果はlib/フォルダーにあります。結果の.dllファイルと.dll.aファイルは一緒になります(.dll.aはリンカーに通知したいものであり、.dllは実行時にシステムで使用可能である必要があります)。.aファイルは静的リンク用です。

于 2012-05-10T22:18:08.073 に答える