Не удается скомпилировать простой источник на 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, вам нужно будет перейти к настройкам проекта, чтобы настроить его, если вы не редактируете файлы в фоновом режиме вручную. Здесь вы можете увидеть скриншот, который демонстрирует, что у вас есть вкладка компоновщика, где вы можете настроить все это правильно.
Я разрешаю это:
Я добавил Эти параметры компоновщика:
-L/usr/local/lib -lglfw3 -pthread -lGLEW -lGLU -lGL -lrt -lXrandr -lXxf86vm -lXi -lXinerama -lX11