由于32位/ 64位不匹配,无法解析的外部符号_glfwInit

时间:2018-12-10 16:29:33

标签: c++ visual-studio-2015 linker-errors glfw

如何以Visual Studio 2015可以实际看到的方式链接库?

这是我的文件夹的一些屏幕截图: glfw3glfw3/include/glfw/glfw3/lib

我试图将这些文件夹链接到Visual Studio中的“ vc ++目录=>包含/库目录”下,例如:includelibrary

还可以在链接器=>输入=> additional dependencies

下直接将其链接到我的项目

在我看来,一切似乎都是正确的(这就是我正在学习的教程Learnopengl.com中的样子)

注意:我也使用GLAD库做同样的事情,该库具有一个.c文件,该文件直接放入我的源代码中,并且头文件的链接方式与GLFW相同。

但尽管尝试运行此代码:

#include <glad/glad.h>
#include <GLFW/glfw3.h>

int main() {
    glfwInit();
    return 0;
}

它将始终返回此错误或类似错误:

1>------ Build started: Project: opengl_test, Configuration: Debug Win32 ------
1>  main.cpp
1>main.obj : error LNK2019: unresolved external symbol _glfwInit referenced in function _main
1>C:\Users\Honza\Desktop\C++ programs\lib\glfw3\lib\glfw3.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'X86'
1>c:\users\honza\documents\visual studio 2015\Projects\opengl_test\Debug\opengl_test.exe : fatal error LNK1120: 1 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

我猜我链接库的方式有问题。如果愿意,我愿意重新安装Visual Studio,请给我一些可能的解决方案。我想开始学习opengl,但是所有这些带有链接库的爵士乐使我感到沮丧和困惑。

编辑:这里的问题是我使用的是64位GLFW二进制文件而不是32位二进制文​​件,并以32位进行编译。我已经解决了这个问题,现在出现了更多错误:

1>------ Build started: Project: opengl_test, Configuration: Debug Win32 ------
1>libglfw3.a(init.c.obj) : error LNK2019: unresolved external symbol ___chkstk_ms referenced in function __glfwInputError
1>libglfw3.a(init.c.obj) : error LNK2019: unresolved external symbol _vsnprintf referenced in function __glfwInputError
1>MSVCRTD.lib(vsnprintf.obj) : error LNK2001: unresolved external symbol _vsnprintf
1>libglfw3.a(context.c.obj) : error LNK2019: unresolved external symbol _sscanf referenced in function __glfwRefreshContextAttribs
1>MSVCRTD.lib(vsnprintf.obj) : error LNK2001: unresolved external symbol __vsnprintf
1>C:\Users\Honza\Documents\Visual Studio 2015\Projects\opengl_test\Debug\opengl_test.exe : fatal error LNK1120: 4 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

2 个答案:

答案 0 :(得分:0)

您写道,您试图链接“这些文件夹”,而实际上,需要2件单独的物品才能使用静态库中的函数。

  1. 使用正确的头文件,以便编译成功。从您引用的错误来看,编译进展顺利。该程序知道有一个名为_glfwInit的外部函数。
  2. 链接到特定的库(.lib文件)。看起来您放置了文件夹的路径,而不是.lib文件的完整路径。

在链接器下=>输入=>其他依赖项,放置gfw3.lib文件的完整路径。

答案 1 :(得分:0)

在跟随learningopengl.com时,我遇到了同样的问题,问题是您需要再次使用 cmake 重建 glfw库,
但是这一次,当您选择Visual Studio 2015或该项目的生成器时,还必须选择:生成器的可选平台-> x64
您可以在 Visual Studio 构建glfw ,并且出现的平台是 x64

,确保一切正常