非官方的OpenGL SDK链接问题 - 未定义的引用

时间:2012-09-08 11:23:35

标签: c++ opengl sdk linker static-libraries

我正在努力让Unofficial OpenGL SDK库工作,并开始使用glutil库来实现matrixStack功能。我使用Visual Studio 2010编译源代码并将库移动到位于我的Code :: Blocks文件夹中的minGW文件夹。我也将头文件移到了那里的include文件夹中。

现在一切都应该就绪,应该为我的操作系统编译,以便下面的代码可以正常工作。

    // Get rotation matrix
    //float rotValue = (glutGet(GLUT_ELAPSED_TIME)) / 10;
    glm::mat3 rotMatrix = RotateAxis(0.0f, 0.0f, 1.0f, 0.0f);
    // Build final matrix from rotMatrix
    glm::mat4 finalMatrix(rotMatrix);
    finalMatrix[3].x = camX;
    finalMatrix[3].y = camY;
    finalMatrix[3].z = camZ - 1.0f;
    finalMatrix[3].w = 1.0f;

    glutil::MatrixStack stack(finalMatrix);
    glutil::PushStack push(stack);


    // Object 1
    glBindVertexArray(vaoObject);          // Advantage of using vao's is that you only have to do all the vertex attribute enabling and buffer stuff once.
    glUniformMatrix4fv(modelToCameraMatrixUnif, 1, GL_FALSE, glm::value_ptr(stack.Top()));
    glDrawElements(GL_TRIANGLES, ARRAY_COUNT(indexData), GL_UNSIGNED_SHORT, 0);
    // Object 2
    stack.Translate(glm::vec3(0.0f, 0.5f, 0.0f));       // THIS IS WHERE THINGS GO WRONG
    finalMatrix[3].z = camZ - 2.00f;
    glUniformMatrix4fv(modelToCameraMatrixUnif, 1, GL_FALSE, glm::value_ptr(stack.Top()));
    glDrawElementsBaseVertex(GL_TRIANGLES, ARRAY_COUNT(indexData), GL_UNSIGNED_SHORT, 0, 36/2);

对stack.Translate的调用会产生以下错误:未定义引用'glutil :: MatrixStack :: Translate(glm :: detail :: tvec3 const&)'这是非常奇怪的,因为没有translate调用MatrixStack和PushStacks的构造函数工作得很好,这很奇怪。

我尝试将-glutil添加到链接器但没有解决我的问题。

标题包括(与openGL相关):

// Open GL and GLUT
#include <gl/glew.h>
#include <gl/glut.h>

// Open GL Libraries
#include <glm/glm.hpp>
#include <glm/gtc/type_ptr.hpp>
#include <glutil/glutil.h>

我仍然不确定如何找到正确的名称来链接库,因为OpenGL SDK没有在他们的网站上显示这些信息所以我不确定-glutil是否正确。我猜这个问题与链接阶段有关。

1 个答案:

答案 0 :(得分:1)

您是否在MinGW下使用VC ++编译的C ++代码?你知道那些编译器的ABI是不同的吗?甚至名称修改方案也不同,因此可以解释为什么它无法链接。如果来自mingw链接器的函数名称的未编译版本(应该在错误报告中的某个位置),那么查看从glutil导出的那个 - 使用例如。 DLL Export Viewer - 或者是静态链接的glutil?如果它不匹配,您可能需要为库和代码使用相同的编译器。