opengl错误:未定义引用`main'colle2:错误:ld返回1退出状态

时间:2017-01-19 19:57:21

标签: c++ opengl

我修改了一个试图渲染三角形的程序,我得到以下错误:

#include <iostream>
#include <string.h>
#include <GL/glew.h>
#include <GL/glut.h>
GLuint VBO;
const GLchar* vertexShaderSource = "#version 330 core\n"
    "layout (location = 0) in vec3 position;\n"
    "void main()\n"
    "{\n"
    "gl_Position = vec4(position.x, position.y, position.z, 1.0);\n"
    "}\0";
const GLchar* fragmentShaderSource = "#version 330 core\n"
     "out vec4 color;\n"
     "void main()\n"
     "{\n"
     "color = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"
     "}\n\0";

 void RenderSceneCB()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);

    glDrawArrays(GL_TRIANGLES, 0, 3);

    glDisableVertexAttribArray(0);

    glutSwapBuffers();
}


void InitializeGlutCallbacks()
 {
     glutDisplayFunc(RenderSceneCB);
 }

    void CreateVertexBuffer()
{
    GLfloat Vertices[] = {
    -0.5f, -0.5f, 0.0f, // Left  
     0.5f, -0.5f, 0.0f, // Right 
     0.0f,  0.5f, 0.0f  // Top   
    };
    glGenBuffers(1, &VBO);
    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
}

void shader() {
   // Build and compile our shader program
   // Vertex shader
    GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
    glCompileShader(vertexShader);
    // Check for compile time errors
    GLint success;
    GLchar infoLog[512];
    glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success);
    if (!success)
   {
    glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
    std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl;
    }
    // Fragment shader
    GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
    glCompileShader(fragmentShader);
    // Check for compile time errors
    glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
    if (!success)
   {
    glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);
    std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl;
   }
  // Link shaders
  GLuint shaderProgram = glCreateProgram();
  glAttachShader(shaderProgram, vertexShader);
  glAttachShader(shaderProgram, fragmentShader);
  glLinkProgram(shaderProgram);
  // Check for linking errors
  glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success);
  if (!success) {
    glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog);
    std::cout << "ERROR::SHADER::PROGRAM::LINKING_FAILED\n" << infoLog << std::endl;
  }
  glDeleteShader(vertexShader);
  glDeleteShader(fragmentShader);
 }

int main(int argc, char** argv)
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGB);
  glutInitWindowSize(1024, 768);
  glutInitWindowPosition(100, 100);
  glutCreateWindow("Tutorial 04");

  InitializeGlutCallbacks();

  // Must be done after glut is initialized!
  GLenum res = glewInit();
  if (res != GLEW_OK) {
    std::cout << "Error: '%s'\n" << glewGetErrorString(res) << std::endl;
    return 1;
  }

 std::cout << "GL version: %s\n" << glGetString(GL_VERSION);

 glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

 CreateVertexBuffer();

 shader();

 glutMainLoop();

 return 0;
 }

我只有一个名为triangle_with_shader.cpp的文件和此文件中的代码:

package com.foo;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class App 
{
    static class Condition<T> {
        final int idx;
        final T compareValue;
        public Condition(final int idx, final T compareValue) {
            this.idx = idx;
            this.compareValue = compareValue;
        }
        boolean satisfies(final T other) {
            return other.equals(compareValue);
        }

        int getIdx() {
            return idx;
        }
    }
    public static void main( String[] args )
    {
        final List<Condition<String>> conditions = new ArrayList<Condition<String>>();
        conditions.add(new Condition<String>(1, "v1"));
        conditions.add(new Condition<String>(2, "v2"));
        final List<String> inputs = new ArrayList<String>(Arrays.asList("v1", "xyz"));
        boolean ret = true;
        for (int i = 0; i < inputs.size(); i++) {
            if (!conditions.get(i).satisfies(inputs.get(i)))
            {
                System.out.println("failed at " + conditions.get(i).getIdx());
                ret = false;
                break;
            }
        }
        System.out.println("ret=" + ret);
    }
}
谁能帮我解决这个问题?非常感谢你

1 个答案:

答案 0 :(得分:0)

此:

 g++ -Wall -o triangle_with_shader.cpp -lglut -lGLU -lGLEW

错误 - 您正在尝试将输出可执行文件设为.cpp文件。你想要这样的东西:

 g++ -Wall triangle_with_shader.cpp -lglut -lGLU -lGLEW  -o myprog

然后您运行myprog

相关问题