GLEW - why should I define GLEW_STATIC?
Asked Answered
Z

1

6

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?

Zacarias answered 9/4, 2018 at 20:35 Comment(0)
L
6

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
Logger answered 9/4, 2018 at 21:9 Comment(3)
@Rocket if you do not use GLEW_STATIC nor GLEW_BUILD the code is compiled expecting that you link DLL to it. So the resulting app will be dependent on GLEW.DLL file. with GLEW_STATIC all the GLEW stuff will be linked in your exe so your App will not need anything else. In case using DLL and not link it properly you will get unresolved external errors in the code...Awoke
Misinformation about the keyword export (which existed before it didn't, and now it is back again, but neither the old nor the new meaning are applicable here).Glycogen
@BenVoigt I see. I've fixed that.Logger

© 2022 - 2024 — McMap. All rights reserved.