2

Win 7 x64 システムで MinGW を使用して比較的単純な OpenGL プログラムをコンパイルしようとしていますが、いくつかの GLEW 関数への未定義の参照を取得し続けています。ライブラリをプログラムにリンクするように設定し、リストにない可能性のあるライブラリを探しましたが、リンカーからの出力はまだ次のようになります。

16:35:50 **** Incremental Build of configuration Debug for project test ****
Info: Internal Builder is used for build
gcc -LD:/DEV/openGL/lib/x86 -LD:/DEV/x86/lib -o test.exe test.o -lfreeglut -lglaux -lglew32s -lglu32 -lglfw3 -lopengl32 -lgdi32 
test.o: In function `init':
E:\Development\C\test\Debug/../test.c:32: undefined reference to `_imp____glewGenVertexArrays'
E:\Development\C\test\Debug/../test.c:33: undefined reference to `_imp____glewBindVertexArray'
E:\Development\C\test\Debug/../test.c:35: undefined reference to `_imp____glewGenBuffers'
E:\Development\C\test\Debug/../test.c:36: undefined reference to `_imp____glewBindBuffer'
E:\Development\C\test\Debug/../test.c:37: undefined reference to `_imp____glewBufferData'
test.o: In function `display':
E:\Development\C\test\Debug/../test.c:45: undefined reference to  `_imp____glewBindVertexArray'
test.o: In function `main':
E:\Development\C\test\Debug/../test.c:61: undefined reference to `_imp__glewInit@0'
collect2: ld returned 1 exit status

16:35:50 Build Finished (took 675ms)

-lglew32 と -lglew32s の両方をいくつかの異なる構成で試しましたが、おそらく glew32 にはない定義が glew32s にあったと考えましたが、これは役に立ちませんでした。私が見逃している可能性があるもの、または見落としているものに関するガイダンスはありますか?

4

1 に答える 1

8

静的リンク ライブラリを使用している場合は、#define GLEW_STATIC事前に行う必要があります。実際にソース コード#include "glew.h"に を配置するのではなく、ルールを Makefile に追加して、このプリプロセッサ トークンを定義します。#define ...

ちなみに、これはGLEWのインストールドキュメントに記載されています。しかし、この質問の回数から判断すると、十分に明確に述べられていない可能性があります。


アップデート:

このトークンを定義する理由は、Microsoft Windows が__declspec (...)DLL のインポートとエクスポートに特別なトークンを使用するためです。を定義することによりGLEW_STATIC、リンカーに標準の動作を使用してシンボルを検索するように指示します.lib

GLEW_STATICが未定義の場合、ライブラリのシンボルが実行時に解決されることをリンカーに通知します。ただし、MSVC は、エクスポートを作成しているのか、インポートを探しているのかを知る必要があるため、GLEW_BUILDこの動作を定義する別のトークンがあります。GLEW をビルド (エクスポート) するのではなく、リンク (インポート) したいので、 を定義しないGLEW_BUILDようにしてください。

/*
 * GLEW_STATIC is defined for static library.
 * GLEW_BUILD  is defined for building the DLL library.
 */

#ifdef GLEW_STATIC
#  define GLEWAPI extern
#else
#  ifdef GLEW_BUILD
#    define GLEWAPI extern __declspec(dllexport)
#  else
#    define GLEWAPI extern __declspec(dllimport)
#  endif
#endif


.libまた、GLEW の公式 Web サイトで提供されている ビルド済みのダイナミック リンクと DLL ファイルを使用できないことにも注意してください。これらは MSVC を使用してコンパイルされています。MinGW で MSVC でコンパイルされた DLL を使用するには、このリンクを参照してください。より良い解決策は、ダイナミック リンク ライブラリの使用を避け、静的ライブラリを使用することです。

于 2013-08-28T01:06:34.233 に答える