简单的 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
我正在尝试用 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