【问题标题】:Visual Studio 11 GLFW external symbol errorVisual Studio 11 GLFW 外部符号错误
【发布时间】:2013-11-26 16:54:56
【问题描述】:

我使用的基本代码是来自http://www.glfw.org/documentation.html的示例

我得到这个输出:

1>------ Build started: Project: ConsoleApplication1, Configuration: Debug Win32 ------
1>  Quelle.cpp
1>Quelle.obj : error LNK2019: unresolved external symbol _glfwInit referenced in function _main
1>Quelle.obj : error LNK2019: unresolved external symbol _glfwTerminate referenced in function _main
1>Quelle.obj : error LNK2019: unresolved external symbol _glfwCreateWindow referenced in function _main
1>Quelle.obj : error LNK2019: unresolved external symbol _glfwWindowShouldClose referenced in function _main
1>Quelle.obj : error LNK2019: unresolved external symbol _glfwPollEvents referenced in function _main
1>Quelle.obj : error LNK2019: unresolved external symbol _glfwMakeContextCurrent referenced in function _main
1>Quelle.obj : error LNK2019: unresolved external symbol _glfwSwapBuffers referenced in function _main
1>C:\Users\MICHAEL\documents\visual studio 2012\Projects\ConsoleApplication1\Debug\ConsoleApplication1.exe : fatal error LNK1120: 7 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

glfw3.h 位于 VC/include 目录中。 我还将 glfw3.lib 添加到 VC/lib 文件夹中,并将 glfw3.lib 添加为链接器输入的附加依赖项,但我仍然收到此错误。

知道为什么吗?我使用了预编译的二进制文件(支持 MSVC2012 和 64x)http://www.glfw.org/download.html

【问题讨论】:

  • 可能是 32 位/64 位冲突。你下载了哪一个,你正在为哪一个编译?
  • 我已经下载了 64 位 Windows 二进制文件,因为我有 64 位 Windows,而我的 Visual Studio 是 64 位,但我编译为 32 位。我会在 32 位版本上试用它,并告诉你它是否有效。
  • 不。与 32 位二进制文​​件完全相同的错误
  • 注意:你不应该往 VC 安装目录中添加东西;将它们放在您的项目旁边,并适当地设置您的项目的包含和库路径。 VC 在查找 lib 文件时可能会在您不期望的位置查找(例如,64/32 位库位于不同的位置)。这是一个你应该忽略的实现细节。
  • 好的,谢谢。我将它从 VC 目录中删除,并将 lib 路径设置为新目录。解决方案已被删除 - 顺便说一句,它没有用

标签: c++ opengl visual-studio-2012 linker glfw


【解决方案1】:

好的,经过反复试验,我解决了。

  1. 使用 32 位二进制文​​件
  2. 项目右键->属性->VC++
  3. 包含目录:C:\Users\MICHAEL\Desktop\glfw-3.0.3.bin.WIN32\include;$(IncludePath)
  4. 库目录:C:\Users\MICHAEL\Desktop\glfw-3.0.3.bin.WIN32\lib-msvc110;$(LibraryPath)
  5. 链接器 -> 输入 -> 附加依赖项添加
  6. glfw3.lib 和 opengl32.lib

这为我解决了。

【讨论】:

  • 谢谢,opengl32.lib 的加入让我感动了 :)
  • 哇,经过 8 小时的尝试,您用正确的第一条指令解决了我的问题。我从来没有想过在 64 位操作系统上使用 32 位二进制文​​件会解决我的问题。
  • 非常感谢你好世界为我工作,但示例 boeing.cpp 仍然有一些错误
  • 当我尝试在第 6 步中添加 glfw3.lib and opengl32.lib 时,出现 cannot open 'glfw3.lib' 错误,有什么建议可以解决吗?
【解决方案2】:

如果有人打算使用 64 位版本的 GLFW,这是我的解决方案:

  1. 从 github 获取 GFLW 源代码。
  2. 使用 CMake 生成 64 位 Visual Studio sln。
  3. 使用正确的设置配置 glfw:

如果是动态库:

项目 -> 配置 -> C/C++ -> 代码生成 -> 运行时库 -> 多线程调试 DLL (/MDd)

如果是静态库:

项目 -> 配置 -> C/C++ -> 代码生成 -> 运行时库 -> 多线程调试 (/MTd)

  1. 构建 glfw 项目。

  2. 在您的项目中链接以下二进制文件:

     glfw3.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;comdlg32.lib;advapi32.lib;glfw3.lib
    
  3. 还可以使用相应的 /MDd 或 /MTd 编译器标志配置您的项目,并将其配置为在 x64 上构建。

  4. 构建。

【讨论】:

    【解决方案3】:

    确保根据您使用的版本将您的平台设置为 x64 或 32。 我尝试获取 64 位平台,但一直遇到问题,直到我注意到我在 Visual Studio 中的活动平台是 win32。 转到配置管理器并确保其设置为 64

    【讨论】:

      【解决方案4】:

      我没有必要的声誉来评论接受的答案(迈克尔),但我想指出我让他的方法奏效了。我需要更正的是在 IncludePath/LibraryPath 的其余部分之前而不是之后切换包含和库目录。

      【讨论】:

      • 你能写出来吗?
      • 关于这个问题不太记得了,但我猜想而不是迈克尔写的试试这个:$(IncludePath);C:\Users\\Desktop\glfw-3.0.3 .bin.WIN32\include ---- and ---- $(LibraryPath);C:\Users\\Desktop\glfw-3.0.3.bin.WIN32\lib-msvc110
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 2023-03-28
      • 1970-01-01
      • 2013-07-20
      • 2015-06-15
      • 1970-01-01
      相关资源
      最近更新 更多