我正在尝试在OS X Yosemite上编译Hello Triangle练习。它在我的Ubuntu机器上编译得很好。它实际上在Yosemite上编译得很好但是当我运行它时我得到一个Seg Fault。我是OS X的新手,所以我不在编辑中包含一些内容吗?我正在使用glfw
和glew
。
g++ main.cpp -I/usr/local/include -I/opt/X11/include -L/usr/local/lib -I/opt/X11/lib -w -std=c++11 -framework OpenGL -lglfw3 -lglew -o main
答案 0 :(得分:1)
发生segflaut是因为未创建GLFW窗口。所以window是一个空指针。为了便于调试,您应该在调用glfwMakeContextCurrent()之前在代码中进行检查。例如:
GLFWwindow* window = glfwCreateWindow(WIDTH, HEIGHT, "LearnOpenGL", nullptr, nullptr);
if (!window)
{
glfwTerminate();
std::cerr << "Failed to create glfw window \n";
exit(EXIT_FAILURE);
}
glfwMakeContextCurrent(window);
现在,要解决实际问题,您需要指定您的上下文应该向前兼容,如GLFW faq
中所述OS X当前支持的唯一OpenGL 3.x和4.x上下文是前向兼容的核心配置文件上下文。支持的版本是10.7 Lion上的3.2和10.9 Mavericks上的3.3和4.1。在所有情况下,您的GPU需要支持指定的OpenGL版本才能成功创建上下文。
要创建OpenGL 3.2或更高版本的上下文,您应该设置以下提示:
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
如果您想了解有关向前兼容性的更多详细信息,请查看OpenGL文档。
此外,您的编译命令不起作用,因为它不会调用GLFW所需的所有框架,如GLFW文档中building section中所述。