2016-05-19 10 views
0

私は最新のOpenGL 3.3を使用しています。ライブラリは、ウィンドウではglfw-3.1.1、OpenGLコンテンツではglew-1.12.0です。私は、Visual Studioですべてのlibsを構築した2012年、基本的にすべてがしかし、実行している私は、この行glDrawArrays(GL_TRIANGLES, 0, 3);を使用したら、私はopengl32.libにリンクしたら、それはなぜopengl32.libにリンクする必要がありますか

main.obj : error LNK2019: unresolved external symbol [email protected] referenced in function _main 
test.exe : fatal error LNK1120: 1 unresolved externals 
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\BIN\cl.EXE"' : return code '0x2' 

をこのエラーをスローし、それが働きました。私の質問は、私がWindowsでOpenGLを使うときです。私はいつも前のlibとリンクする必要があります。

+0

MSYS2のこれらのライブラリはありますか? –

+3

実際に使用しようとしている機能を提供するライブラリにリンクする必要があるのは本当ですか? –

+0

あなたが実際に求めていることは、「ライブラリから関数を使用する場合、そのライブラリとリンクする必要がありますか」です。答えは「はい」です。 –

答えて

2

glDrawArraysは、古いの機能です。 OpenGL-1.1には頂点配列が導入されて以来、これまでにあったことがあります.20年前から最初から存在していました。このように、拡張機構を介して公開されているものの一部ではなく、良い古いopengl32.dll - OpenWebを使用したい場合はいつでもリンクする必要があります。 OpenGLのローダーの中には、バックグラウンドでそれを行うものもありますが、WindowsでOpenGLを使用している場合は、常にopengl32.dll

+0

この有益な答えをありがとう。 '' glew.h ''では、この関数 '' glDrawArrays'が定義されています。なぜ古いものとリンクしなければならないのですか? – CroCo

+1

@CroCo: "glew.h"では定義されておらず、単に*宣言されているためです。ヘッダーファイルには、コンパイラが最終的なプログラムで使用できると想定されるものの*宣言のみが含まれています。しかし、実際の定義はヘッダファイルには含まれていません。 "glew.h"には裁判所の宣言が含まれています。 glDrawArraysを与えるのはGLEWの仕事ではありません。 GLEWの仕事は* OpenGL-1.1の後に来たものをあなたに与えることです。しかし、 "glew.h"自体はあなたに全く何も与えていません。 – datenwolf

0

にリンクしています。ここでの混乱は、OpenGL 3.3を使用したいからです。 opengl32.lib。

ここでは32はバージョン番号ではなく、Windows C/C++ APIの名前であるWIN32からのものです。

+0

実際にはありません。私がOpenGL 4.3を使用しても、それは前のエラーを投げつけます。 – CroCo

関連する問題