【问题标题】:GLEW - why should I define GLEW_STATIC?GLEW - 我为什么要定义 GLEW_STATIC?
【发布时间】:2018-04-09 20:35:40
【问题描述】:

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

【问题讨论】:

    标签: opengl glew


    【解决方案1】:

    在必须指定的静态库中实现函数时。 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
    

    【讨论】:

    • @Rocket 如果您不使用GLEW_STATICGLEW_BUILD,则编译代码时期望您将DLL 链接到它。所以生成的应用程序将依赖于GLEW.DLL 文件。使用GLEW_STATIC,所有 GLEW 内容都将链接到您的 exe 中,因此您的应用程序不需要任何其他内容。如果使用 DLL 并且没有正确链接它,您将在代码中得到未解决的外部错误...
    • 关于关键字export的错误信息(之前存在,现在又回来了,但旧的和新的含义都在这里不适用)。
    • @BenVoigt 我明白了。我已经解决了。
    猜你喜欢
    • 2013-07-22
    • 2016-02-09
    • 1970-01-01
    • 2020-11-14
    • 2015-09-28
    • 2023-03-18
    • 2017-06-07
    • 1970-01-01
    • 2014-08-18
    相关资源
    最近更新 更多