Link error while trying to use glLoadGen

1

While reading the OpenGL 4 Shading Language Cookbook, I encountered the OpenGL Loader Gen library and immediately wanted to try it out. I started creating a small example program that you can see underneath.

#include "GLFW/glfw3.h"
#include "GL/gl_core_4_1.hpp"

namespace engine
{
    class Window
    {
    private:
        const unsigned int width;

        const unsigned int height;

        const char *title;

        const void refresh()
        {
            glfwSwapBuffers(this -> glfwWindow);
            glfwPollEvents();
        }
    protected:
        GLFWwindow *glfwWindow;
    public:
        Window(const unsigned int width, const unsigned int height, const char title[]): width(width), height(height), title(title)
        {
            if (glfwInit() != GLFW_TRUE)
            {
                throw "Couldn't initialise the required GLFW library.";
            }
            glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GLFW_TRUE);
            glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
            glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
            glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
            if (this -> glfwWindow)
            {
                throw "Cannot create a secondary window.";
            }
            this -> glfwWindow = glfwCreateWindow(this -> width, this -> height, this -> title, NULL, NULL);
            // This is the crucial line that will stop the program from compiling.
            gl::exts::LoadTest context = gl::sys::LoadFunctions();
            if (!context)
            {
                throw "Couldn't initialse the required GL library.";
            }
            glfwMakeContextCurrent(this -> glfwWindow);
            glfwSwapInterval(GLFW_TRUE);
            if (!glfwWindow)
            {
                glfwTerminate();
                throw "Couldn't create a new initially empty window.";
            }
        }

        const bool await()
        {
            this -> refresh();
            if (glfwWindowShouldClose(this -> glfwWindow))
            {
                glfwDestroyWindow(this -> glfwWindow);
                glfwTerminate();
                return false;
            }
            return true;
        }
    };
}

int main(const int argc, const char *argv[])
{
    engine::Window window(1280, 720, "Foundation");
    while (window.await())
    {
    }
    return 0x00000000;
}

My next step was to try compiling the program with the LLVM compiler on computer running on the macOS High Sierra operating system.

clang++ -o Application.exec Subdirectory/*.cpp -lglfw -framework Cocoa -framework OpenGL -framework IOKit -framework CoreVideo

However, during compilation I receive the following unexpected linker error:

Undefined symbols for architecture x86_64:
  "gl::sys::LoadFunctions()", referenced from:
      engine::Window::Window(unsigned int, unsigned int, char const*) in Application-58a670.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Here is my actual question: how do I let the program shown above compile using the previously mentioned OpenGL Loader Gen library?

c++
opengl
asked on Stack Overflow Jul 8, 2018 by Theikun • edited Jul 10, 2018 by Darklighter

1 Answer

3

from the docs

The above command line will generate gl_core_3_3.h and gl_core_3_3.c files. Simply include them in your project; there is no library to build, no unresolved externals to filter through.

You need to run their generator to produce those source files.

answered on Stack Overflow Jul 8, 2018 by Darklighter

User contributions licensed under CC BY-SA 3.0