未解决的外部符号(OpenGL和C++)

4
好的,我正在撰写一个小项目,它并不复杂,只是有几个类。正如标题所示,它使用OpenGL。目前,还没有“真正”的主函数。在我使用gl*函数调用的地方,我已经包含了glew.h,并添加到链接器输入glew32.lib。
然而,它给了我这个错误:
错误2 error 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);

那么,问题在哪里呢?如果一个gl*函数调用链接失败,那么不是所有的都必须失败吗?

这些调用难道不对应于 glew 的定义吗? - K-ballo
2个回答

12

glBindTexture是"core" OpenGL特性之一,该函数位于opengl32.dll中,因此只需将opengl32.lib添加到链接器输入即可。

glDrawElementsBaseVertex和glBindVertexArray是扩展功能,GLEW将其定义为函数指针(在运行时进行动态后期绑定),因此不会出现"未解决的符号"错误。


0

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

对于VS:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接