错误无法找到-lglu

时间:2017-05-30 22:47:41

标签: c++ opengl

我在Windows上使用CodeBlock,我有3个文件:

bmp.h

#include <GL/glaux.h>
AUX_RGBImageRec *LoadBMP(char *Filename);

bmp.cpp

#include <windows.h>
#include <stdio.h>
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glaux.h>
#include "bmp.h"

AUX_RGBImageRec *LoadBMP(char *Filename)
{
     FILE *File=NULL;
     if(!Filename)
     {
          return NULL;
     }

   File = fopen(Filename, "r");

   if(File)
   {
        fclose(File);

        return auxDIBImageLoad(Filename);
   }

   return NULL;
 }

program.cpp

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#include <GL/glut.h>

#include "bmp.h"

float z_post = -5.0f;
float rot = 0.0f;

GLfloat LightAmbient[]=     {0.5f, 0.5f, 0.5f, 1.0f};
GLfloat LightDiffuse[]=     {1.0f, 1.0f, 1.0f, 1.0f};
GLfloat LightPosition[]=    {0.0f, 0.0f, 2.0f,1.0f};

GLuint filter;
GLuint texture[3];

int LoadGLTextures()
//Load Bitmaps And Convert To Textures
{
    int Status = FALSE;
    AUX_RGBImageRec *TextureImage[1];
    memset(TextureImage, 0, sizeof(void *)*1);
    if (TextureImage[0]=LoadBMP("Glass.bmp"))
    {
        Status = TRUE;
        glGenTextures(3, &texture[0]);
        glBindTexture(GL_TEXTURE_2D, texture[0]);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX,
                      TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

        glBindTexture(GL_TEXTURE_2D, texture[1]);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX,
              TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);

        glBindTexture(GL_TEXTURE_2D, texture[2]);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
        gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data);
    }
    if (TextureImage[0])
    {
        if (TextureImage[0]->data)
        {
            free(TextureImage[0]->data);
        }
        free(TextureImage[0]);
    }
    return Status;
}

void resize(int width, int height)
{
    glViewport(0, 0, width, height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0, (float)width/(float)height, 1.0, 300.0);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void myTimeOut(int id)
{
    rot += 10;
    glutPostRedisplay();
    glutTimerFunc(100, myTimeOut, 0);
}

void myKeyboard(unsigned char key, int x, int y)
{
    if((key == '<') || (key == ',')) z_post-=0.1f;
    else if ((key=='>') || (key=='.')) z_post += 0.1f;
    else if ((key=='F') || (key=='f'))
    {
        filter += 1;
        if (filter > 2)
        {
            filter =0;
        }
        printf("filter: %i", filter);
    }
}

void mydisplay(void)
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);

        glLoadIdentity();
        glTranslatef(0.0, 0.0f, z_post);
        glRotatef(rot, 0, 1, 0);

        glBindTexture(GL_TEXTURE_2D, texture[filter]);

        glBegin(GL_QUADS);
            //front face
            glColor3f(1.0, 0.0, 0.0);
            glNormal3f(0.0f, 0.0f, 1.0f);
            glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
            glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, -1.0f, 1.0f);
            glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, 1.0f);
            glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
            //back face
            glNormal3f(0.0f, 0.0f, -1.0f);
            glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
            glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
            glTexCoord2f(0.0f, 1.0f); glVertex3f(1.0f, 1.0f, -1.0f);
            glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, -1.0f);
            //top face
            glNormal3f(0.0f, 1.0f, 0.0f);
            glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f,1.0f, -1.0f);
            glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
            glTexCoord2f(1.0f, 0.0f); glVertex3f(1.0f, 1.0f, 1.0f);
            glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, -1.0f);
            //bottom face
            glNormal3f(0.0f, -1.0f, 0.0f);
            glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
            glTexCoord2f(0.0f, 1.0f); glVertex3f(1.0f, -1.0f, -1.0f);
            glTexCoord2f(0.0f, 0.0f); glVertex3f(1.0f, -1.0f, 1.0f);
            glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
            //right face
            glNormal3f(1.0f, 0.0f, 0.0f);
            glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
            glTexCoord2f(1.0f, 1.0f); glVertex3f(1.0f, 1.0f, -1.0f);
            glTexCoord2f(0.0f, 1.0f); glVertex3f(1.0f, 1.0f, 1.0f);
            glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
            //left face
            glNormal3f(-1.0f, 0.0f, 1.0f);
            glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, -1.0f);
            glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f);
            glTexCoord2f(1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f);
            glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, -1.0f);
       glEnd();
       glFlush();
       glutSwapBuffers();
}

void init()
{
    if(!LoadGLTextures())
    {
        return;
    }

    glEnable(GL_TEXTURE_2D);
    glShadeModel(GL_SMOOTH);
    glClearColor(0.0f, 0.0f, 0.0f, 0.5f);
    glClearDepth(1.0f);
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LEQUAL);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    glLightfv(GL_LIGHT1, GL_AMBIENT, LightAmbient);
    glLightfv(GL_LIGHT1, GL_DIFFUSE, LightDiffuse);
    glLightfv(GL_LIGHT1, GL_POSITION, LightPosition);
    glEnable(GL_LIGHT1);

    return;
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_DOUBLE | GLUT_DEPTH);
    glutInitWindowSize(500,500);
    glutInitWindowPosition(0,0);
    glutCreateWindow("simple");

    glutDisplayFunc(mydisplay);
    glutKeyboardFunc(myKeyboard);
    glutTimerFunc(100, myTimeOut, 0);
    glutReshapeFunc(resize);

    init();
        glutMainLoop();
        return 0;
}

但是当我运行它时我遇到了这个错误

Build Message

Build Log

我正在尝试找到关于-lglu / ld.exe的解决方案然后我找不到任何东西。

Glass.bmp已经在文件夹上,然后我尝试下载并将glaux.dll复制到MinGW / bin 并在我的项目中构建链接器:opengl32,glu,glut32

1 个答案:

答案 0 :(得分:0)

您的链接器不知道在哪里可以找到您引用的库。

你必须告诉它在哪里找到它。最简单的解决方案可能是将您引用的库的libs目录添加到链接器的搜索目录中。确保链接器的目录与构建目标相对应(换句话说,不要链接x86并编译为ARM)。