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?
GLEW - why should I define GLEW_STATIC?
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
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.
GLEW_STATIC
norGLEW_BUILD
the code is compiled expecting that you link DLL to it. So the resulting app will be dependent onGLEW.DLL
file. withGLEW_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