Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我需要glut.h、glut32.lib、glut32.dll来编译openGL程序?_C_Opengl_Glut - Fatal编程技术网

C 为什么我需要glut.h、glut32.lib、glut32.dll来编译openGL程序?

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中函数的信息,而不是实际代码,因此运行时加载程

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

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

  • glut32.h
    是编译阶段使用的头文件
  • glut32.lib
    是链接器用于解析对
    glut32
    库提供的函数和/或对象的引用的库文件。当与DLL一起使用时,.lib文件通常被称为“导入库”,它包含链接器用来使可执行文件隐式引用DLL中函数的信息,而不是实际代码,因此运行时加载程序在运行时加载可执行文件时也会加载DLL。一些工具链提供了一个工具(通常称为
    implib
    ),它可以使用DLL作为输入生成导入库
  • 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?因为这个问题似乎显示了对所有这些知识的严重缺乏。