Не удается скомпилировать простой источник на C++ и OpenGL (GLFW) в Linux в NetBeans

Я начал изучать 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 GLEWn");
         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 ответов


перво-наперво:

Это мой источник (я не использовала эти символы: в заголовочных файлах.):

что это неправильно, и вы должны. Ваши текущие утверждения 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

поскольку вы используете IDE Netbeans, вам нужно будет перейти к настройкам проекта, чтобы настроить его, если вы не редактируете файлы в фоновом режиме вручную. Здесь вы можете увидеть скриншот, который демонстрирует, что у вас есть вкладка компоновщика, где вы можете настроить все это правильно.

enter image description here


Я разрешаю это:

Я добавил Эти параметры компоновщика:

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