c/c++语言开发共享为什么我需要glut.h,glut32.lib,glut32.dll ALL来编译一个openGL程序?

据我所知,.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文件 – 实际上提供了自己的implibfunction。 我不确定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

      (0)
      上一篇 2020年12月9日
      下一篇 2020年12月9日

      精彩推荐