据我所知,.lib文件是某种编译文件,当然dll文件包含其中的所有函数。 为什么我不能只使用.lib文件或.dll文件? 为什么说明书告诉我得到所有这三个?
顺便说一句,openGL文件是不是免费的,反正我们有一个“freeGLut”?
据我所知,.lib文件是某种编译文件,当然dll文件包含其中的所有函数。
不,这不是那么简单。
DLL是可执行的二进制文件,减去启动入口点。 DLL导出一些符号,但这些符号没有特征,只在地址空间中有位置。 编译器不能从标准DLL(或SO)推导出每个符号具有的签名 。 为此,需要通过其他来源以某种方式告知签名。 这是头文件(.h)。
但是,为了实际上有用,必须在执行时将DLL加载到进程中。 为此,可执行文件需要使用其他信息进行扩充,即要加载的DLL。 在Windows下,这是使用存根库(.lib)完成的,该存根库仅包含该DLL导入信息。 在其他操作系统上,您通过将链接器指向该链接来链接“DLL”。
为什么我不能只使用.lib文件或.dll文件?
因为.lib不包含实际代码而只包含信息,因此使用某个DLL。 并且因为Microsoft工具无法从目标DLL中提取其动态链接信息。
为什么说明书告诉我得到所有这三个?
因为每个文件都有一个特定的function,你需要它们全部三个
顺便说一句,openGL文件是不是免费的,我们有一个“freeGLut”?
GLUT不是OpenGL的一部分。 这是一个独立开发的图书馆。 OpenGL本身也只是一个规范,没有“OpenGL”源; 只有特定的实现,其中一些是免费的。
某些工具(例如GCC工具链)可以直接使用DLL代替.lib文件 – 实际上提供了自己的implib
function。 我不确定Microsoft为什么不在他们的工具中支持它。
GLUT是一个可选组件。 如果您的程序不使用它,则不需要它。 但是如果你使用它,你需要glut.h
因为你的程序#include
s it,并且你需要glut32.lib
因为它是链接器用来建立你的可执行文件与DLL的关系的导入库 。 编译或链接程序时不需要glut32.dll
(因为导入库用于此目的),但是在运行程序时需要它,因为它包含程序正在调用的实际GLUT函数。
Freeglut是原始GLUT的开源克隆,因为原始GLUT已过时,其许可证不允许其他人进行更改以改进它。
以上就是c/c++开发分享为什么我需要glut.h,glut32.lib,glut32.dll ALL来编译一个openGL程序?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522166.html