3

OK、私は小さなプロジェクトを書いています。複雑なことは何もありません。いくつかのクラスがあるだけです。タイトルが示すように、OpenGL を使用します。現時点では、「実際の」メイン関数はありません。gl* 関数呼び出しを使用した箇所には glew.h をインクルードし、リンカー入力 glew32.lib に追加しました。

それでも、それは私にこれを与えます:

エラー 2 エラー LNK2019: 未解決の外部シンボル _ imp _glBindTexture@8 が関数で参照されています "public: void __thiscall Texture2D::Bind(unsigned int)" (?Bind@Texture2D@@QAEXI@Z) Texture.obj Licenta

...そして、OpenGL テクスチャ関数に関するその他の未解決の外部シンボル エラーのホスト。しかし、これについては文句を言いません:

glBindVertexArray(m_VAO);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_Buffers[INDEX_BUFFER]);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Indices[0]) * Indices.size(), &Indices[0], GL_STATIC_DRAW);

またはこれ:

glDrawElementsBaseVertex(GL_TRIANGLES, 
                             m_Entries[i].NumIndices, 
                             GL_UNSIGNED_INT, 
                             (void*)(sizeof(unsigned int) * m_Entries[i].BaseIndex), 
                             m_Entries[i].BaseVertex);

それで、取引は何ですか?1 つの gl* 関数呼び出しがリンクに失敗した場合、すべてが失敗する必要はありませんか?

4

2 に答える 2

11

glBindTexture は「コア」OpenGL 機能です。この関数は opengl32.dll にあるため、opengl32.lib をリンカー入力に追加するだけです。

glDrawElementsBaseVertex と glBindVertexArray は拡張機能であり、GLEW はこれらを関数ポインターとして定義する (実行時に動的レイト バインディングが行われる) ため、「未解決のシンボル」エラーは発生しません。

于 2012-06-02T22:42:01.933 に答える
0

リンカー入力にライブラリを含める必要があります。

対の場合:

  1. ライブラリのファイルをソリューションのルート フォルダーに配置します。(一部のライブラリでは、一般的にこれを行う必要がない場合があります)
  2. Visual Studio のメニューで、[プロジェクト] --> [SolutionName] プロパティに移動します。
  3. ダイアログが開きます。[構成プロパティ] --> [リンカー] --> [入力] に移動します
  4. 「追加の依存関係」にライブラリの名前を追加します。(おそらく* .lib になります)
于 2012-06-02T22:47:03.573 に答える