据我所知,.lib文件是某种编译文件,当然,dll文件包含了其中的所有函数。为什么我不能只处理.lib文件或.dll文件呢?为什么说明书告诉我要把这三个都买下来?
顺便问一下,我们有一个“freeGLut”,难道openGL文件不是免费的吗??
发布于 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中提取它们的动态链接信息。
为什么说明告诉我要将这三个都获取?
因为每个文件都有一个特定的功能,您需要这三个文件来
的形式获取实际的库
顺便问一下,openGL文件不是免费的吗,因为我们有一个"freeGLut"?
GLUT不是OpenGL的一部分。这是一个独立开发的库。此外,OpenGL本身只是一种规范,没有"the“OpenGL源代码;只有特定的实现,其中一些是免费的。
发布于 2012-07-19 08:45:31
glut32.h是编译期间使用的头文件,stageglut32.lib是链接器用来解析对glut32库提供的函数和/或对象的引用的库文件。当与动态链接库一起使用时,.lib文件通常被称为“导入库”,它不是实际代码,而是链接器用来使可执行文件隐式引用动态链接库中的函数的信息,以便在运行时加载可执行文件时,运行时加载程序也会加载动态链接库。一些工具链提供了一个工具(通常称为implib),它可以使用DLL生成导入库,因为input.glut32.dll是在运行时用于在可执行时提供函数和对象的动态库。一些工具(例如,GCC工具链)可以直接使用DLL来代替.lib文件-实际上提供了它自己的implib功能。我不确定为什么微软没有在他们的工具中支持这一点。
发布于 2012-07-19 08:48:16
GLUT是一个可选组件。如果你的程序不使用它,你就不需要它。但是如果你使用它,你需要glut.h,因为你的程序#include它,你需要glut32.lib,因为它是链接器用来建立可执行文件与DLL关系的import library。在编译或链接程序时不需要glut32.dll (因为导入库用于此目的),但在运行程序时需要它,因为它包含程序正在调用的实际GLUT函数。
Freeglut是原始GLUT的开源克隆,因为原始的GLUT已经过时了,它的许可证不允许其他人进行更改来改进它。
https://stackoverflow.com/questions/11552100
复制相似问题