未解析的外部符号(OpenGL和c ++)

时间:2012-06-02 22:38:26

标签: c++ opengl linker

好的,所以我正在写一个小项目,没什么复杂的,它只有几个类。 正如标题所暗示的,它使用OpenGL。目前,没有“真正的”主要功能。 我已经使用了glew.h,无论我在哪里使用gl *函数调用,并添加到链接器输入glew32.lib。

然而,它给了我这个:

  

错误2错误LNK2019:未解析的外部符号   函数“public:void __thiscall Texture2D :: Bind(unsigned int)”中引用了_ imp _glBindTexture @ 8   (?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);

那么,这笔交易是什么?如果一个gl *函数调用链接失败,那么ALL不会失败吗?

2 个答案:

答案 0 :(得分:11)

glBindTexture是一个“核心”OpenGL功能。此函数驻留在opengl32.dll中,因此只需将opengl32.lib添加到链接器输入中。

glDrawElementsBaseVertex和glBindVertexArray是扩展,GLEW将它们定义为函数指针(在运行时完成动态后期绑定),因此没有“未解析的符号”错误。

答案 1 :(得分:0)

您需要在链接器输入中包含该库。

对于VS:

  1. 将库的文件放在解决方案的根文件夹中。 (对于某些库,您可能不需要这样做)
  2. 在Visual Studios菜单中转到Project - > [SolutionName]属性。
  3. 将打开一个对话框。导航到配置属性 - >链接器 - >输入
  4. 在“附加依赖项”中添加库的名称。 (它可能是 * .lib)