C++ 运行Opengl C++;在mac中

C++ 运行Opengl C++;在mac中,c++,xcode,macos,opengl,C++,Xcode,Macos,Opengl,我在编译代码时不断遇到此错误: 架构x86_64的未定义符号: “_glewInit”,引用自: _主音中的主音 “_glfwCreateWindow”,引用自: _主音中的主音 “_glfwGetKey”,引用自: _主音中的主音 “_glfwInit”,引用自: _主音中的主音 “_glfwMakeContextCurrent”,引用自: _主音中的主音 “_glfwPollEvents”,引用自: _主音中的主音 “_glfwSetInputMode”,引用自: _主音中的主音 “_glf

我在编译代码时不断遇到此错误:

架构x86_64的未定义符号: “_glewInit”,引用自: _主音中的主音 “_glfwCreateWindow”,引用自: _主音中的主音 “_glfwGetKey”,引用自: _主音中的主音 “_glfwInit”,引用自: _主音中的主音 “_glfwMakeContextCurrent”,引用自: _主音中的主音 “_glfwPollEvents”,引用自: _主音中的主音 “_glfwSetInputMode”,引用自: _主音中的主音 “_glfwSwapBuffers”,引用自: _主音中的主音 “_glfwderminate”,引用自: _主音中的主音 “_glfwWindowHint”,引用自: _主音中的主音 “_glfwWindowShouldClose”,引用自: _主音中的主音 ld:找不到架构x86_64的符号 叮当声:错误:链接器命令失败,退出代码为1(使用-v查看调用)

我试着用Xcode和terminal编译它。我使用以下命令使用terminal进行编译:

$g++ -I/usr/X11R6/include -I/usr/local/include -I/opt/local/include -L/usr/local/lib/ -L/opt/local/lib -lSOIL -framework GLUT -framework OpenGL -framework CoreFoundation -w -o main tutorial01.cpp
我也尝试了很多方法,从堆栈溢出。但我仍然可以重试其中任何一个(也许尝试的顺序可以改变结果)

附上我的密码。这是一个在opengl中打开窗口的非常简单的代码

// Include standard headers
#include <stdio.h>
#include <stdlib.h>

// Include GLEW
#include <GL/glew.h>

// Include GLFW
#include <glfw3.h>

GLFWwindow* window;

// Include GLM
#include <glm/glm.hpp>
using namespace glm;

int main( void )
{
    // Initialise GLFW
    if( !glfwInit() )
    {
        fprintf( stderr, "Failed to initialize GLFW\n" );
        getchar();
        return -1;
    }

    glfwWindowHint(GLFW_SAMPLES, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // To make MacOS happy; should not be needed
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    // Open a window and create its OpenGL context
    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" );
        getchar();
        glfwTerminate();
        return -1;
    }
    glfwMakeContextCurrent(window);

    // Initialize GLEW
    if (glewInit() != GLEW_OK) {
        fprintf(stderr, "Failed to initialize GLEW\n");
        getchar();
        glfwTerminate();
        return -1;
    }

    // Ensure we can capture the escape key being pressed below
    glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);

    // Dark blue background
    glClearColor(0.0f, 0.0f, 0.4f, 0.0f);

    do{
        // Clear the screen. It's not mentioned before Tutorial 02, but it can cause flickering, so it's there nonetheless.
        glClear( GL_COLOR_BUFFER_BIT );

        // Draw nothing, see you in tutorial 2 !


        // Swap buffers
        glfwSwapBuffers(window);
        glfwPollEvents();

    } // Check if the ESC key was pressed or the window was closed
    while( glfwGetKey(window, GLFW_KEY_ESCAPE ) != GLFW_PRESS &&
          glfwWindowShouldClose(window) == 0 );

    // Close OpenGL window and terminate GLFW
    glfwTerminate();

    return 0;
}
//包括标准头
#包括
#包括
//包括GLEW
#包括
//包括GLFW
#包括
GLFWwindow*窗口;
//包括GLM
#包括
使用名称空间glm;
内部主(空)
{
//初始化GLFW
如果(!glfwInit())
{
fprintf(stderr,“未能初始化GLFW\n”);
getchar();
返回-1;
}
glfwWindowHint(GLFW_样本,4个);
glfwWindowHint(GLFW_上下文_版本_专业,3);
glfwWindowHint(GLFW_上下文_版本_小调,3);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_TRUE);//使MacOS高兴;不需要
glfwWindowHint(GLFW_OPENGL_配置文件、GLFW_OPENGL_核心配置文件);
//打开窗口并创建其OpenGL上下文
window=glfwCreateWindow(1024768,“教程01”,NULL,NULL);
如果(窗口==NULL){
fprintf(stderr,“无法打开GLFW窗口。如果您有英特尔GPU,则它们与3.3不兼容。请尝试教程的2.1版本。\n”);
getchar();
glfwTerminate();
返回-1;
}
glfwMakeContextCurrent(窗口);
//初始化GLEW
如果(glewInit()!=GLEW\u确定){
fprintf(stderr,“未能初始化GLEW\n”);
getchar();
glfwTerminate();
返回-1;
}
//确保我们可以捕获下面按下的退出键
glfwSetInputMode(窗口,GLFW_粘滞键,GL_真);
//深蓝色背景
glClearColor(0.0f、0.0f、0.4f、0.0f);
做{
//清除屏幕。教程02之前没有提到过,但它会导致闪烁,所以它仍然存在。
glClear(GLU颜色缓冲位);
//什么也不画,见教程2!
//交换缓冲区
glfwSwapBuffers(窗口);
glfwPollEvents();
}//检查是否按下ESC键或窗口是否关闭
while(glfwGetKey(窗口,GLFW_键_退出)!=GLFW_按&&
glfwWindowShouldClose(窗口)==0);
//关闭OpenGL窗口并终止GLFW
glfwTerminate();
返回0;
}

如果要使用clang,为什么要使用“g++”?错误是我使用XCode得到的。我真的对它们没有任何偏好。您是否将xcode设置为与OpenGL.framework和GLUT.framework链接(在“构建阶段”选项卡中)?是的。由于一些关于堆栈溢出的帖子,我还添加了cocoa.framework。找不到什么符号?它们通常应该列在您引用的错误消息之后。如果要使用clang,为什么要使用“g++”呢?错误就是我使用XCode得到的。我真的对它们没有任何偏好。您是否将xcode设置为与OpenGL.framework和GLUT.framework链接(在“构建阶段”选项卡中)?是的。由于一些关于堆栈溢出的帖子,我还添加了cocoa.framework。找不到什么符号?它们通常应列在您引用的错误消息之后。