我现在已经学习了大约4-5个月的opengl。 我准备停止使用过剩(一个混淆了opengl编程的许多困难/繁琐方面的帮助库)
问题是,我觉得我已经删除了所有对glut.h的引用,以及所有函数调用,但是当我运行我的应用程序时它仍然试图链接到glut32.dll
一般来说,我和其他人可以学习以后, 如何在编译之前或之后告诉哪些库需要可扩展/源代码以及为什么(函数/标题)?
我正在使用VS2010但是在带有g ++的linux机器上交叉编译它 在此特定实例中,我没有将dll列为附加依赖项。但我确实在extrenal dependencies文件夹中看到了glut.h ...我只是不能删除它
谢谢
答案 0 :(得分:3)
Dependency Walker是您检查已编译二进制文件的dll依赖项的朋友。
主要问题当然是你已经在某个地方为你的项目添加了glut.lib或glut32.lib。它可能在Project Properties>链接器设置>其他库或某些源文件包含#pragma,如下所示: -
#pragma comment(lib, "glut32.lib")
答案 1 :(得分:2)
查看项目的链接器属性。 dll,或者更确切地说,相应的.lib应该在“附加依赖项”下列出。
编辑:
顺便说一句,包括标题和链接库(或dll)是两回事。您可能在某处包含标题,但未链接到相应的库。在这种情况下,链接器会给您一个错误。另一方面,您可能不包括标题,根本不使用库,但您可能仍然链接到它。
在这种情况下,我们似乎都有。如果glut.h位于外部依赖项文件夹中,那么您必须将其包含在代码中的某个位置。尝试使用find-in-files来查找它。或者完全从系统中删除它并尝试编译。
答案 2 :(得分:1)
每个exe / dll都有一个称为导入地址表(IAT)的东西,它是存储在PE(可移植可执行文件:窗口的可执行文件格式)文件的标题中的信息,关于当加载有关模块时加载器需要加载的dll 。您可以使用PE Viewer或PE Explorer等工具查看此信息或编写自己的信息(这更难)。您将看到的是与您的可执行文件静态链接的库。如果你没有在任何这些文件中看到glut32.dll,它可能是通过LoadLibrary api在其他一些openGL库中动态加载的。我对openGL二进制文件不太熟悉,所以我无法为您确认。
答案 3 :(得分:0)
如果您无法找到visual studio项目选项中隐藏的glut.lib,请在标准文本编辑器中打开.vcproj并进行全文搜索。