C 为什么我需要glut.h、glut32.lib、glut32.dll来编译openGL程序?
据我所知,.lib文件是某种编译文件,当然dll文件包含其中的所有函数。为什么我不能只处理.lib文件或.dll文件?为什么说明书要我把这三个都拿出来 顺便问一下,openGL文件不是免费的吗?我们有一个“freeGLut”?C 为什么我需要glut.h、glut32.lib、glut32.dll来编译openGL程序?,c,opengl,glut,C,Opengl,Glut,据我所知,.lib文件是某种编译文件,当然dll文件包含其中的所有函数。为什么我不能只处理.lib文件或.dll文件?为什么说明书要我把这三个都拿出来 顺便问一下,openGL文件不是免费的吗?我们有一个“freeGLut”? glut32.h是编译阶段使用的头文件 glut32.lib是链接器用于解析对glut32库提供的函数和/或对象的引用的库文件。当与DLL一起使用时,.lib文件通常被称为“导入库”,它包含链接器用来使可执行文件隐式引用DLL中函数的信息,而不是实际代码,因此运行时加载程
是编译阶段使用的头文件glut32.h
是链接器用于解析对glut32.lib
库提供的函数和/或对象的引用的库文件。当与DLL一起使用时,.lib文件通常被称为“导入库”,它包含链接器用来使可执行文件隐式引用DLL中函数的信息,而不是实际代码,因此运行时加载程序在运行时加载可执行文件时也会加载DLL。一些工具链提供了一个工具(通常称为glut32
),它可以使用DLL作为输入生成导入库implib
是运行时用于在可执行时提供函数和对象的动态库glut32.dll
一些工具(例如GCC工具链)可以直接使用DLL来代替.lib文件-实际上提供了自己的
implib
功能。我不知道为什么微软在他们的工具中不支持这一点。GLUT是一个可选组件。如果你的程序不使用它,你就不需要它。但是如果您使用它,您需要glut.h
,因为您的程序#包含它,并且您需要glut32.lib
,因为链接器使用它来建立可执行文件与DLL的关系。编译或链接程序时不需要glut32.dll
(因为导入库可用于此目的),但运行程序时需要它,因为它包含程序正在调用的实际GLUT函数
Freeglut是原始GLUT的开源克隆,因为原始GLUT已经过时,其许可证不允许其他人对其进行更改以改进
据我所知,.lib文件是某种编译文件,当然dll文件包含其中的所有函数
不,没那么简单
DLL是一个可执行的二进制文件,减去启动入口点。DLL导出一些符号,但这些符号没有任何特征,仅在地址空间中的位置。编译器无法从标准DLL(或其他)推断每个符号的签名。为此,需要通过其他来源以某种方式告知签名。这是头文件(.h)
然而,要真正发挥作用,DLL必须在执行时加载到进程中。为此,可执行文件需要增加额外的信息,即加载什么DLL。在Windows下,这是使用存根库(.lib)完成的,该存根库仅携带DLL导入信息。在另一个操作系统上,通过将链接器指向“DLL”来链接“DLL”
为什么我不能只处理.lib文件或.dll文件
因为.lib不包含实际代码,只包含信息,所以需要使用特定的DLL。因为微软的工具无法从目标DLL中提取动态链接信息
为什么说明书要我把这三个都拿出来
因为每个文件都有一个特定的函数,您需要所有这三个函数
- 获取函数签名(.h)
- 告诉可执行文件加载某个DLL(.lib)
- 并以.dll的形式获取实际的库
顺便问一下,openGL文件不是免费的,我们有一个“freeGLut”
GLUT不是OpenGL的一部分。这是一个独立开发的图书馆。而且OpenGL本身只是一个规范,没有OpenGL源代码;只有一些特定的实现,其中一些是免费的。<指令>是那些在网站上从一个东西下载它们的人,编写OpenGL程序来学习它单独使用C语言特征,或者它也会使用C++特征?这个问题太混乱,难以回答。你是在问C/C++链接是如何工作的吗?C/C++头文件是如何工作的?DLL是如何工作的?OpenGL是如何工作的?什么是过剩,它如何不是OpenGL?因为这个问题似乎显示了对所有这些知识的严重缺乏。