OpenGL in C++ - Error Linking GLEW and GLFW (Using Xcode on macOS)

Viewed 291

I'm learning how to program in OpenGL with C++ using Xcode, and I keep having this issue with linking. I'm on macOS Catalina 10.15.4.

I've searched around for a fix, but so far nothing has worked. I triple checked my header and library search paths, I've made sure that the necessary files are included, all of that. I suspect it might be some weird 32bit/64bit problem, but that's definitely outside of my scope of knowledge so I don't know how I would fix that.

I have included my code, the errors, as well as some pictures of my files and my Xcode search paths. I apologize if I didn't include something or formatted something improperly; I can never seem to ask my questions properly on this site.

#define GLEW_STATIC
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
#include <stdlib.h>
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdocumentation"
#define numVAOs 1
using namespace std;

GLuint renderingProgram;
GLuint vao[numVAOs];

GLuint createShaderProgram() {
    const char *vshaderSource = "#version410 \n" "void main(void) \n" "{gl_Position = vec4(0.0, 0.0, 0.0, 1.0);}";
    
    const char *fshaderSource = "#version410 \n" "out vec4 color; \n" "void main(void) \n" "{color = vec4(0.0, 0.0, 1.0, 1.0);}";
    
    GLuint vShader = glCreateShader(GL_VERTEX_SHADER);
    GLuint fShader = glCreateShader(GL_FRAGMENT_SHADER);

    glShaderSource(vShader, 1, &vshaderSource, NULL);
    glShaderSource(fShader, 1, &fshaderSource, NULL);
    glCompileShader(vShader);
    glCompileShader(fShader);

    GLuint vfProgram = glCreateProgram();
    glAttachShader(vfProgram, vShader);
    glAttachShader(vfProgram, fShader);
    glLinkProgram(vfProgram);
    
    return vfProgram;
}

void init(GLFWwindow* window) {
    renderingProgram = createShaderProgram();
    glGenVertexArrays(numVAOs, vao);
    glBindVertexArray(vao[0]);
}

void display(GLFWwindow* window, double currentTime) {
    glUseProgram(renderingProgram);
    glDrawArrays(GL_POINTS, 0, 1);
}

int main(void) {
    if (!glfwInit()) {exit(EXIT_FAILURE);}
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    GLFWwindow* window = glfwCreateWindow(600, 600, "Chapter2 - program1", NULL, NULL);
    int actualScreenWidth, actualScreenHeight;
    glfwGetFramebufferSize(window, &actualScreenWidth, &actualScreenHeight);
    glfwMakeContextCurrent(window);
    glViewport(0, 0, actualScreenWidth, actualScreenHeight);
    glewExperimental = GL_TRUE;
    if (glewInit() != GLEW_OK) {exit(EXIT_FAILURE);}
    glfwSwapInterval(1);
    init(window);
    while (!glfwWindowShouldClose(window)) {
        display(window, glfwGetTime());
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    glfwDestroyWindow(window);
    glfwTerminate();
    exit(EXIT_SUCCESS);
}
Undefined symbols for architecture x86_64:
  "___glewAttachShader", referenced from:
      createShaderProgram() in main-1c69e8.o
  "___glewBindVertexArray", referenced from:
      init(GLFWwindow*) in main-1c69e8.o
  "___glewCompileShader", referenced from:
      createShaderProgram() in main-1c69e8.o
  "___glewCreateProgram", referenced from:
      createShaderProgram() in main-1c69e8.o
  "___glewCreateShader", referenced from:
      createShaderProgram() in main-1c69e8.o
  "___glewGenVertexArrays", referenced from:
      init(GLFWwindow*) in main-1c69e8.o
  "___glewLinkProgram", referenced from:
      createShaderProgram() in main-1c69e8.o
  "___glewShaderSource", referenced from:
      createShaderProgram() in main-1c69e8.o
  "___glewUseProgram", referenced from:
      display(GLFWwindow*, double) in main-1c69e8.o
  "_glDrawArrays", referenced from:
      display(GLFWwindow*, double) in main-1c69e8.o
  "_glViewport", referenced from:
      _main in main-1c69e8.o
  "_glewExperimental", referenced from:
      _main in main-1c69e8.o
  "_glewInit", referenced from:
      _main in main-1c69e8.o
  "_glfwCreateWindow", referenced from:
      _main in main-1c69e8.o
  "_glfwDestroyWindow", referenced from:
      _main in main-1c69e8.o
  "_glfwGetFramebufferSize", referenced from:
      _main in main-1c69e8.o
  "_glfwGetTime", referenced from:
      _main in main-1c69e8.o
  "_glfwInit", referenced from:
      _main in main-1c69e8.o
  "_glfwMakeContextCurrent", referenced from:
      _main in main-1c69e8.o
  "_glfwPollEvents", referenced from:
      _main in main-1c69e8.o
  "_glfwSwapBuffers", referenced from:
      _main in main-1c69e8.o
  "_glfwSwapInterval", referenced from:
      _main in main-1c69e8.o
  "_glfwTerminate", referenced from:
      _main in main-1c69e8.o
  "_glfwWindowHint", referenced from:
      _main in main-1c69e8.o
  "_glfwWindowShouldClose", referenced from:
      _main in main-1c69e8.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

/usr/local/include/GL/glew.h

/usr/local/include/GLFW/glfw3.h

/usr/local/lib/libGLEW.2.2.0.dylib AND /usr/local/lib/libglfw.3.3.dylib

Xcode Link Binary with Libraries

Xcode Search Paths

0 Answers
Related