GLEW - 为什么要定义 GLEW_STATIC?

5 opengl glew

我正在为 GLEW 使用静态链接库,因此我必须定义 GLEW_STATIC 来编译我使用 GLEW 的程序。但我一直不明白为什么这是必要的。所以有人能解释一下原因吗?

Rab*_*d76 5

在必须指定的静态库中实现函数时。该extern关键字提供链接信息。从动态库导入的函数必须用 标记extern __declspec(dllimport)GLEW_STATIC是激活第一种情况的预处理器定义。

“glew.h”文件(版本2.1.0)中的相关代码部分是:

/*
 * 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
Run Code Online (Sandbox Code Playgroud)

  • @Rocket 如果您不使用 `GLEW_STATIC` 或 `GLEW_BUILD`,则编译代码时希望您将 DLL 链接到它。因此生成的应用程序将依赖于`GLEW.DLL` 文件。使用`GLEW_STATIC`,所有GLEW 内容都将链接到您的exe 中,因此您的应用程序将不需要任何其他内容。如果使用 DLL 而没有正确链接它,您将在代码中遇到未解决的外部错误... (3认同)