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)




