Search code examples
openglglew

GLEW - why should I define GLEW_STATIC?


I am using a statically linked library for GLEW and therefore I have to define GLEW_STATIC to compile my programs that are using GLEW. But I have never understood why this is necessary. So could anyone explain the reason?


Solution

  • When a function is implemented in a static library that must be specified. The extern keyword provides linkage information. A function which is imported from a dynamic library has to be marked by extern __declspec(dllimport). GLEW_STATIC is a preprocessor definition which activates the first case.

    The relevant code part in the "glew.h" file (verison 2.1.0) is:

    /*
     * GLEW_STATIC is defined for static library.
     * GLEW_BUILD  is defined for building the DLL library.
     */
    
    #ifdef GLEW_STATIC
      define GLEWAPI extern
    #else
      ifdef GLEW_BUILD
        define GLEWAPI extern __declspec(dllexport)
      else
        define GLEWAPI extern __declspec(dllimport)
      endif
    #endif