简单的 openGL 程序无法通过编译

Simple openGL program won't pass compile

我正在尝试用 openGL 编译一个非常简单的程序:

#include <stdio.h>
#include <stdlib.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <glm/glm.hpp>

using namespace glm;

int main()
{
    if( !glfwInit() )
    {
            fprintf( stderr, "Failed to initialize GLFW\n");
            return -1;
    }

    glfwWindowHint(GLFW_SAMPLES, 4); // 4x antialiasing
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); // Use OpenGL 3.X
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); // Use openGL X.3
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);  
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 

    // Open a window and create OpenGL context
    GLFWwindow* window; // May be needed to make it global
    window = glfwCreateWindow(1024, 768, "Tutorial 01", NULL, NULL);
    if(window == NULL)
    {
            fprintf(stderr, "Failed to pen GLFW window. If you have Intel GPU they are not 3.3 compatible. Try the 2.1 version of the tutorial.\n");
            glfwTerminate();
            return -1;
    }
    glfwMakeContextCurrent(window); // Initialize GLEW
    glewExperimental=true; // Needed in core profile
    if(glewInit() != GLEW_OK)
    {
            fprintf(stderr, "Failed to initialize GLEW.\n");
            return -1;
    }
}

然而,当我尝试用 g++ 编译它时,出现以下错误:

In function `main':
playground.cpp:(.text+0x9): undefined reference to `glfwInit'
playground.cpp:(.text+0x49): undefined reference to `glfwWindowHint'
playground.cpp:(.text+0x58): undefined reference to `glfwWindowHint'
playground.cpp:(.text+0x67): undefined reference to `glfwWindowHint'
playground.cpp:(.text+0x76): undefined reference to `glfwWindowHint'
playground.cpp:(.text+0x85): undefined reference to `glfwWindowHint'
playground.cpp:(.text+0xa4): undefined reference to `glfwCreateWindow'
playground.cpp:(.text+0xd2): undefined reference to `glfwTerminate'
playground.cpp:(.text+0xe5): undefined reference to `glfwMakeContextCurrent'
playground.cpp:(.text+0xeb): undefined reference to `glewExperimental'
playground.cpp:(.text+0xf1): undefined reference to `glewInit'
collect2: error: ld returned 1 exit status

我找到了一些针对这个特定问题的帖子,解决方案似乎是将所需的库作为参数传递给 g++。但是,当我这样做时,问题仍然存在。

这是我编译代码的方式:

g++ -lglfw3 -pthread -lGLEW -lGLU -lGL -lrt -lXrandr -lXxf86vm -lXi -lXinerama -lX11 -o openGLWindow openGLWindow.cpp

如有任何帮助,我们将不胜感激...

when i try to compile it with g++ i'm getting the following errors:

不,你的编译很好。您收到 link 错误,而不是编译错误。

您的 link 错误的原因是您的 link 命令行完全倒退。试试这个:

g++ -pthread -o openGLWindow openGLWindow.cpp -lglfw3 -lGLEW -lGLU -lGL -lXrandr -lXxf86vm -lXi -lXinerama -lX11 -lrt -ldl

我不确定上面库的顺序是否正确,但它肯定比你拥有的要好。源代码、目标文件和库在命令行上的顺序 matters

我使用此命令在终端中构建和 运行 我的应用程序。 (使用 cd exemple/c 在应用程序目录中移动) gcc -o main main.c -I/usr/include -lglfw -lGL -GL -glut; sleep 0.1;./main

我通过此命令在 shell/prompt/terminal 中看到我的应用程序在哪里 pkg-config --libs --cflags --debug glfw3