【问题标题】:Learning OpenGL with glew and freeglut; but there is an issue用 glew 和 freeglut 学习 OpenGL;但是有一个问题
【发布时间】:2015-07-29 04:54:16
【问题描述】:

我正在使用 Visual Studio 2013,并使用 nuget 安装“glew”和“freeglut”。我正在学习一门课程,以及这些安装说明:

http://in2gpu.com/2014/10/15/setting-up-opengl-with-visual-studio/

一路上我确实感到困惑,但我仔细阅读了说明。在我的简单项目的构建结束时,我收到了一个错误:

1>LINK : 致命错误 LNK1104: 无法打开文件 'Dependencies\freeglut.obj'

#include <iostream>
#include "Dependencies\glew\glew.h"
#include "Dependencies\freeglut\freeglut.h"

int main(int argc, char **argv)
{
    return 0;
}

我已经阅读了其他有关安装库的网站,但我只是感到困惑。任何帮助和深入讨论都会非常有帮助。谢谢。

【问题讨论】:

    标签: c++ opengl visual-studio-2013 glew freeglut


    【解决方案1】:

    LINK : 致命错误 LNK1104: 无法打开文件 'Dependencies\freeglut.obj'

    不应该是freeglut.obj,而是freeglut.lib

    另外,请确保您正确遵循了教程的Now let’s prepare FreeGLUT 部分中的所有步骤:他们非常清楚地解释了如何添加搜索库目录和链接器输入,但 Visual Studio 报告缺少Dependencies\freeglut.obj - 仔细检查,什么你有没有在项目属性 -> Linker -> Input -> Additional Dependencies.

    【讨论】:

      【解决方案2】:

      不幸的是,我不得不问一个显而易见的问题:freeglut.lib 是否位于它应该在的位置,您是否指向正确的目录?

      您的错误是 Dependencies\freeglut.obj,但如果您按照教程进行操作,则 freeglut 应该位于 Dependencies\freeglut。 Windows 上的另一个常见错误是使用包含空格的完整文件路径(C:....我的文档...),但没有将整个文件路径放在引号中。链接器会因此而绊倒。

      编辑:我猜我被否决了,因为我没有注意到更明显的问题,即您的链接器正在寻找您没有的 freeglut.obj。确保您将其命名为 freeglut.lib。

      从概念上讲,以下是正在发生的事情,这可能有助于您进行故障排除: 当你编写一个 cpp 文件并编译它时,它就变成了一个 obj 文件。编译器不需要知道一切。您可以声明一个返回 int 并将 bool 作为参数的函数,并在您的代码中使用它,编译器会说“好的,如果你这么说的话。”

      您的程序可能会有几个 cpp 文件,因此也有几个 obj 文件。编译后,obj 文件链接在一起并形成您的可执行文件。如果这里有任何问题(它有!),那就是链接器错误。链接器说“好的,你说你正在使用这个函数......它在哪里?”

      你已经获得了 lib 文件。在这种情况下,它们是静态库,本质上是一组 obj 文件的容器,与您自己编写所有 freeglut 函数和类并编译它们没有什么不同。链接器想要链接它们。对于您编写和编译的代码,Visual Studio 会确保所有内容都位于正确的文件夹中并且位于正确的位置。对于来自其他地方的编译目标文件?它无法知道,所以你必须告诉 VS 两件事:库在哪个文件夹中,以及库文件的名称是什么。然后链接器知道去哪里寻找,以及它在寻找什么。

      在某个地方,您将文件放在错误的位置,或者告诉 VS 错误的位置,或者错误的文件,或者某种组合。或者您已经完成了类似文件路径中没有引号的空格之类的操作。另一个常见的错误是混合不同的平台。 x86(即 32 位)和 x64 目标文件是不同的,如果您的链接器正在寻找一种类型,它将无法理解另一种类型。您的下载提供了不同平台的库,VS 允许您选择目标平台。确保一切都一样。

      【讨论】:

      • 好的,我检查了我所做的一切,我确实有正确的链接器和正确的文件。但是,我错过了这个“freeglut.sln”文件,它应该给我编译项目,这会给我一个新的“freeglut.lib”,它可以工作。而且,最重要的是,我从这里在线找到了该文件:
      • 但是当我加载 .sln 项目时,它说它不兼容,因为我没有 VS'12,因为我使用的是 VS'13。我应该放弃这个并寻找不同的方式来学习openGL吗?
      • 你正在学习的那个教程是 2013 年的,这很奇怪。您可以在此处下载最新的源文件:sourceforge.net/projects/freeglut/files/freeglut/3.0.0 - 完成此操作后,您需要获取 7-zip 来解压缩 tar.gz 文件,然后阅读 CMAKE.readme 文件并按照 Windows 的说明进行操作。您还需要 cmake。这不是微不足道的,但它可能是学习如何做到这一点的好机会。获取原始源文件并自己构建项目和库是一项有用的技能。
      • 好的,我会试试这个,然后回复你看看这是否有效。
      猜你喜欢
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-23
      相关资源
      最近更新 更多