C++ 非官方OpenGL SDK链接问题-未定义参考

C++ 非官方OpenGL SDK链接问题-未定义参考,c++,opengl,sdk,linker,static-libraries,C++,Opengl,Sdk,Linker,Static Libraries,我试图让非官方的OpenGL SDK库正常工作,并开始使用glutil库实现matrixStack功能。我使用VisualStudio2010编译了源代码,并将库移动到位于我的Code::Blocks文件夹中的minGW文件夹中。我也将头文件移到了那边的include文件夹中 现在一切都应该就绪,并且应该为我的操作系统编译,所以下面的代码应该可以正常工作 // Get rotation matrix //float rotValue = (glutGet(GLUT_ELAPSED

我试图让非官方的OpenGL SDK库正常工作,并开始使用glutil库实现matrixStack功能。我使用VisualStudio2010编译了源代码,并将库移动到位于我的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和PushStack的构造函数就可以正常工作,这很奇怪

我尝试向链接器添加-glutil,但没有解决我的问题

标题包括(与openGL相关):

//打开总账和GLUT
#包括
#包括
//开放式GL库
#包括
#包括
#包括

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

> P>你是否使用MinGW下的VC++编译的C++代码?你知道那些编译器的ABI是不同的吗?甚至名称混乱方案也是不同的,因此这可以解释为什么它不能链接。查克,如果来自mingw链接器的函数名的非混合版本(应该在错误报告的某个地方)加工了从glutil导出的函数名-使用例如-或者glutil是静态链接的?如果不匹配,您可能需要为库和代码使用相同的编译器。

< P>您是否使用MinGW下的VC++编译的C++代码?你知道那些编译器的ABI是不同的吗?甚至名称混乱方案也是不同的,因此这可以解释为什么它不能链接。查克,如果来自mingw链接器的函数名的非混合版本(应该在错误报告的某个地方)加工了从glutil导出的函数名-使用例如-或者glutil是静态链接的?如果不匹配,您可能需要对库和代码使用相同的编译器。

Ahh我不知道这一点。我原以为编译后的库在你们的操作系统上是一样的,但不知道编译器也能起作用。我将用code::blocks编译这个库,看看它是如何运行的。谢谢。我刚刚编译了一个liblutilid.a而不是.lib文件,并用静态的.a文件替换了.lib文件。我的项目中没有更改任何内容,但仍然收到相同的错误,因此不确定编译器是否是问题所在。@Robin92:添加-lglutillD并没有解决问题。我还是说找不到-lglutilld。我尝试通过进入BuildOptions->Linker Settings->Add library手动添加我的库,并浏览我的.a文件。如果文档中没有这些名称,有没有办法找到要链接到的名称?乔伊·杜德:也许你应该更仔细地看看那些名字。或者,您也可以只使用Premake4脚本,省去很多麻烦。如果您有这个库的源代码和一点空闲时间,那么一定有办法完成它:只需找到这个方法的源代码(我的意思是实现,而不仅仅是声明),检查它所在的文件(例如,通过一些多文件文本搜索),并查看编译时哪个lib/dll需要此文件。这很粗糙,但根据我的经验,只有这种方法是完全防弹的;)啊,我不知道。我原以为编译后的库在你们的操作系统上是一样的,但不知道编译器也能起作用。我将用code::blocks编译这个库,看看它是如何运行的。谢谢。我刚刚编译了一个liblutilid.a而不是.lib文件,并用静态的.a文件替换了.lib文件。我的项目中没有更改任何内容,但仍然收到相同的错误,因此不确定编译器是否是问题所在。@Robin92:添加-lglutillD并没有解决问题。我还是说找不到-lglutilld。我尝试通过进入BuildOptions->Linker Settings->Add library手动添加我的库,并浏览我的.a文件。如果文档中没有这些名称,有没有办法找到要链接到的名称?乔伊·杜德:也许你应该更仔细地看看那些名字。或者,您也可以只使用Premake4脚本,省去很多麻烦。如果您有这个库的源代码和一点空闲时间,那么一定有办法完成它:只需找到这个方法的源代码(我的意思是实现,而不仅仅是声明),检查它所在的文件(例如,通过一些多文件文本搜索),并查看编译时哪个lib/dll需要此文件。这很粗糙,但根据我的经验,只有这种方法是完全防弹的;)
// 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>