错误LNK2019:函数"void __cdecl init(void)"中引用的未解析的外部符号_LoadShaders(?init @@ YAXXZ)

Luc*_*cas -1 opengl visual-studio-2012

我正在学习OpenGL并尝试运行我的第一个程序.我已将所有文件包含在include,lib和bin文件夹中.我试图添加opengl32.lib; glut32.lib; glu32.lib; 在配置属性 - >链接器 - >输入,但它也没有工作.

我正在使用Visual Studio 2012.

///////////////////////////////////////////////////////////////////////
//
// triangles.cpp
//
///////////////////////////////////////////////////////////////////////

#include <iostream>
using namespace std;

#include <vgl.h>
#include <LoadShaders.h>

enum VAO_IDs { Triangles, NumVAOs };
enum Buffer_IDs { ArrayBuffer, NumBuffers };
enum Attrib_IDs { vPosition = 0 };

GLuint VAOs[NumVAOs];
GLuint Buffers[NumBuffers];

const GLuint NumVertices = 6;

//---------------------------------------------------------------------
//
// init
//

void
init(void)
{
    glGenVertexArrays(NumVAOs, VAOs);
    glBindVertexArray(VAOs[Triangles]);

    GLfloat vertices[NumVertices][2] = {
        { -0.90, -0.90 }, // Triangle 1
        { 0.85, -0.90 },
        { -0.90, 0.85 },
        { 0.90, -0.85 }, // Triangle 2
        { 0.90, 0.90 },
        { -0.85, 0.90 }
    };

    glGenBuffers(NumBuffers, Buffers);
    glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices),
                vertices, GL_STATIC_DRAW);

    ShaderInfo shaders[] = {
        { GL_VERTEX_SHADER, "triangles.vert" },
        { GL_FRAGMENT_SHADER, "triangles.frag" },
        { GL_NONE, NULL }
    };

    GLuint program = LoadShaders(shaders);
    glUseProgram(program);

    glVertexAttribPointer(vPosition, 2, GL_FLOAT,
    GL_FALSE, 0, BUFFER_OFFSET(0));

    glEnableVertexAttribArray(vPosition);
}

//---------------------------------------------------------------------
//
// display
//

void
display(void)
{
    glClear(GL_COLOR_BUFFER_BIT);

    glBindVertexArray(VAOs[Triangles]);
    glDrawArrays(GL_TRIANGLES, 0, NumVertices);

    glFlush();
}

//---------------------------------------------------------------------
//
// main
//

int
main(int argc, char** argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA);
    glutInitWindowSize(512, 512);
    glutInitContextVersion(4, 3);
    glutInitContextProfile(GLUT_CORE_PROFILE);
    glutCreateWindow(argv[0]);

    if (glewInit()) {
        cerr << "Unable to initialize GLEW ... exiting" << endl;
        exit(EXIT_FAILURE);
    }

    init();

    glutDisplayFunc(display);

    glutMainLoop();
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*rio 6

你错过了那个LoadShaders()东西的lib(或cpp)文件,除非它只是标题.在不知道其内容的情况下,我们无法肯定地说出来.


更新:

包含本书源代码的zip文件包含您需要的所有内容.

您应该执行以下操作:

  • 将zip文件解压缩到易于记忆的位置,例如"c:\ openglbook".
  • 在Visual Studio 2012中打开或创建项目.
  • 打开菜单"PROJECT"并选择"[您的项目]属性..."(或按Alt+ F7).
  • 对每个配置重复以下步骤,或选择左上角的"所有配置".
  • 在左侧的树中打开"配置属性",然后选择"VC++目录".
  • 添加c:\openglbook\include到"包含目录".
  • 添加c:\openglbook\lib到"图书馆目录".
  • 关闭项目属性.
  • 将文件"c:\ openglbook\lib\LoadShaders.cpp"复制到项目文件中,并将其添加为另一个源文件.

完成后,您的项目应该构建.如果您仍然缺少依赖关系,例如GLUT函数,请将"lib"子目录中的适当库添加到您已知的链接库列表中.