无法在NetBeans中的Linux中使用C ++和OpenGL(GLFW)编译简单的源代码

时间:2014-04-19 15:28:40

标签: c++ linux opengl netbeans glfw

我开始学习OpenGL(glfw)并从教程中复制源代码并尝试编译它,但是发生了错误。我想我已经核心安装了所有头文件(glm,glfw等)

这是我的来源(我没有在头文件中使用这些字符:<,>):

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

#define GLFW_INCLUDE_GL_3

using namespace glm;
using namespace std;

int main(){
    if(!glfwInit()){
        return -1;
     }

     GLFWwindow* window; // (In the accompanying source code, this variable is global)
     window = glfwCreateWindow( 1024, 768, "Tutorial 01", NULL, NULL);
     if( window == NULL ) {
         fprintf( stderr, "Failed to open GLFW window. If you have an Intel GPU, they are not 3.3 compatible. Try the 2.1 version of the tutorials.\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;
     }

     return 0;
 }

这是NetBeans中的输出:

"/usr/bin/make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/home/jan/NetBeansProjects/a'
"/usr/bin/make"  -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux-x86/a
make[2]: Entering directory `/home/jan/NetBeansProjects/a'
mkdir -p dist/Debug/GNU-Linux-x86
g++ -o dist/Debug/GNU-Linux-x86/a build/Debug/GNU-Linux-x86/main.o 
build/Debug/GNU-Linux-x86/main.o: In function `main':
/home/jan/NetBeansProjects/a/main.cpp:12: undefined reference to `glfwInit'
/home/jan/NetBeansProjects/a/main.cpp:16: undefined reference to `glfwCreateWindow'
/home/jan/NetBeansProjects/a/main.cpp:19: undefined reference to `glfwTerminate'
/home/jan/NetBeansProjects/a/main.cpp:22: undefined reference to `glfwMakeContextCurrent'
/home/jan/NetBeansProjects/a/main.cpp:25: undefined reference to `glewExperimental'
/home/jan/NetBeansProjects/a/main.cpp:26: undefined reference to `glewInit'
collect2: error: ld returned 1 exit status
make[2]: *** [dist/Debug/GNU-Linux-x86/a] Error 1
make[2]: Leaving directory `/home/jan/NetBeansProjects/a'
make[1]: *** [.build-conf] Error 2
make[1]: Leaving directory `/home/jan/NetBeansProjects/a'
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 462ms)   

请帮帮我。谢谢你的时间。

2 个答案:

答案 0 :(得分:10)

首先要做的事情:

  

这是我的来源(我没有在头文件中使用此字符:<,&gt ;.):

那是错的,你应该这样做。你当前的include语句是错误的,我真的很惊讶它是如何以这种方式通过编译过程的。

您在这里看到链接器错误:

/home/jan/NetBeansProjects/a/main.cpp:12: undefined reference to `glfwInit'
/home/jan/NetBeansProjects/a/main.cpp:16: undefined reference to `glfwCreateWindow'
/home/jan/NetBeansProjects/a/main.cpp:19: undefined reference to `glfwTerminate'
/home/jan/NetBeansProjects/a/main.cpp:22: undefined reference to `glfwMakeContextCurrent'
/home/jan/NetBeansProjects/a/main.cpp:25: undefined reference to `glewExperimental'
/home/jan/NetBeansProjects/a/main.cpp:26: undefined reference to `glewInit'

失败可能有以下选项:

  • 您没有链接到库(最有可能)

  • 您没有安装库(根据您的描述不太可能)

  • 您使用的是库中不存在的符号(再次,不太可能)

最可能的原因是你最终没有链接到图书馆。您应该为链接器设置此项:

-lglfw3

请注意,当您开始添加这些链接时,您还需要添加链中的所有内容,因此根据您的注释,这是要添加的整个链:

-L/usr/local/lib -lglfw3 -pthread -lGLEW -lGLU -lGL -lrt -lXrandr -lXxf86vm -lXi -lXinerama -lX11

由于您使用的是Netbeans IDE,因此除非您在后台手动编辑文件,否则您需要转到项目设置进行设置。在这里,您可以看到一个屏幕截图,演示您有一个链接器选项卡,您可以在其中正确设置所有这些。

enter image description here

答案 1 :(得分:1)

我解决了:

我将这些参数添加到链接器:

-L/usr/local/lib -lglfw3 -pthread -lGLEW -lGLU -lGL -lrt -lXrandr -lXxf86vm -lXi -lXinerama -lX11