首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么编译一个openGL程序需要Glu.h、Glu32.lib、Glu32.dll?

为什么编译一个openGL程序需要Glu.h、Glu32.lib、Glu32.dll?
EN

Stack Overflow用户
提问于 2012-07-19 07:58:25
回答 3查看 3.7K关注 0票数 0

据我所知,.lib文件是某种编译文件,当然,dll文件包含了其中的所有函数。为什么我不能只处理.lib文件或.dll文件呢?为什么说明书告诉我要把这三个都买下来?

顺便问一下,我们有一个“freeGLut”,难道openGL文件不是免费的吗??

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-19 08:54:16

据我所知,.lib文件是某种编译文件,当然,

文件包含了其中的所有函数。

不,事情没那么简单。

DLL是一个可执行的二进制文件,去掉了启动入口点。DLL导出一些符号,但这些符号没有什么特色,只是地址空间中的位置。编译器不能从标准DLL (或更多)中推断出每个符号都有什么签名。为此,需要通过其他来源以某种方式告知签名。这是头文件(.h)。

但是,为了真正有用,必须在执行时将DLL加载到进程中。为此,需要在可执行文件中添加附加信息,即要加载的DLL。在Windows下,这是使用存根库( stub library,.lib)来完成的,存根库只承载DLL导入信息。在其他操作系统上,您可以通过将链接器指向"DLL“来链接到该DLL。

为什么不能只处理.lib文件或只处理.dll文件?

因为.lib不包含实际代码,而只包含信息,所以要使用某个DLL。而且因为Microsoft工具不能从目标DLL中提取它们的动态链接信息。

为什么说明告诉我要将这三个都获取?

因为每个文件都有一个特定的功能,您需要这三个文件来

  • 获取函数签名(.h)
  • 告诉可执行程序加载某个DLL (.lib)
  • 并以.dll

的形式获取实际的库

顺便问一下,openGL文件不是免费的吗,因为我们有一个"freeGLut"?

GLUT不是OpenGL的一部分。这是一个独立开发的库。此外,OpenGL本身只是一种规范,没有"the“OpenGL源代码;只有特定的实现,其中一些是免费的。

票数 4
EN

Stack Overflow用户

发布于 2012-07-19 08:45:31

  • glut32.h是编译期间使用的头文件,stage
  • glut32.lib是链接器用来解析对glut32库提供的函数和/或对象的引用的库文件。当与动态链接库一起使用时,.lib文件通常被称为“导入库”,它不是实际代码,而是链接器用来使可执行文件隐式引用动态链接库中的函数的信息,以便在运行时加载可执行文件时,运行时加载程序也会加载动态链接库。一些工具链提供了一个工具(通常称为implib),它可以使用DLL生成导入库,因为input.
  • glut32.dll是在运行时用于在可执行时提供函数和对象的动态库。

一些工具(例如,GCC工具链)可以直接使用DLL来代替.lib文件-实际上提供了它自己的implib功能。我不确定为什么微软没有在他们的工具中支持这一点。

票数 4
EN

Stack Overflow用户

发布于 2012-07-19 08:48:16

GLUT是一个可选组件。如果你的程序不使用它,你就不需要它。但是如果你使用它,你需要glut.h,因为你的程序#include它,你需要glut32.lib,因为它是链接器用来建立可执行文件与DLL关系的import library。在编译或链接程序时不需要glut32.dll (因为导入库用于此目的),但在运行程序时需要它,因为它包含程序正在调用的实际GLUT函数。

Freeglut是原始GLUT的开源克隆,因为原始的GLUT已经过时了,它的许可证不允许其他人进行更改来改进它。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11552100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档