【发布时间】:2018-04-09 20:35:40
【问题描述】:
我正在为 GLEW 使用静态链接库,因此我必须定义 GLEW_STATIC 来编译使用 GLEW 的程序。但我一直不明白为什么这是必要的。那么有人能解释一下原因吗?
【问题讨论】:
我正在为 GLEW 使用静态链接库,因此我必须定义 GLEW_STATIC 来编译使用 GLEW 的程序。但我一直不明白为什么这是必要的。那么有人能解释一下原因吗?
【问题讨论】:
在必须指定的静态库中实现函数时。 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
【讨论】:
GLEW_STATIC 或GLEW_BUILD,则编译代码时期望您将DLL 链接到它。所以生成的应用程序将依赖于GLEW.DLL 文件。使用GLEW_STATIC,所有 GLEW 内容都将链接到您的 exe 中,因此您的应用程序不需要任何其他内容。如果使用 DLL 并且没有正确链接它,您将在代码中得到未解决的外部错误...
export的错误信息(之前存在,现在又回来了,但旧的和新的含义都在这里不适用)。