2013-03-18 69 views
2

我已经将.dll添加到Windows/System32,将.lib添加到VS/lib,将.h添加到VS/include。无法链接GLFW C++;添加.dll,.h,.lib,但仍然得到LNK2019

剩下的就是通过项目链接它。这是我有:


#include <glfw.h> 

int main(void) 
{ 
    /* Initialize the library */ 
    if (!glfwInit()) 
     return -1; 

    /* Create a windowed mode window and its OpenGL context */ 
    if (!glfwOpenWindow(640, 480, 8, 8, 8, 0, 24, 0, GLFW_WINDOW)) 
     return -1; 

    /* Loop until the user closes the window */ 
    while (glfwGetWindowParam(GLFW_OPENED)) 
    { 
     /* Render here */ 

     /* Swap front and back buffers and process events */ 
     glfwSwapBuffers(); 
    } 

    return 0; 
} 

1>Main.obj : error LNK2019: unresolved external symbol _glfwSwapBuffers referenced in function _main 
1>Main.obj : error LNK2019: unresolved external symbol _glfwGetWindowParam referenced in function _main 
1>Main.obj : error LNK2019: unresolved external symbol _glfwOpenWindow referenced in function _main 
1>Main.obj : error LNK2019: unresolved external symbol _glfwInit referenced in function _main 
1>C:\Users\Danny\documents\visual studio 2010\Projects\OGL2\Debug\OGL2.exe : fatal error LNK1120: 4 unresolved externals 

我去项目>属性>配置属性>链接> 添加了以下附加依赖:


opengl32.lib;GLFW.lib;glu32.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies) 

为了好的衡量,我还将忽略所有默认库设置为“否”。

我知道我应该链接:opengl32.lib, GLFW.lib, glu32.lib, kernel32.lib and user32.lib

不幸的是,LNK 2019问题仍然存在。真的不确定为什么。所有的帮助非常感谢。

回答

10

外部名称表示您的项目正在构建64位目标(32位DLL导出通常具有stdcall调用约定使用的 @nn后缀)。我敢打赌你的库是为32位目标而构建的。

将项目设置更改为Win32而不是x64。

我猜错了 - 未解析的外部符号(如_glfwSwapBuffers)表明您正在为32位目标构建。构建64位目标时,外部名称不会使用下划线进行修饰。

但基本的解决方案是一样的 - 确保正在构建的目标与您拥有的库的目标相同。所以如果你已经下载了64位的GLFW库,请确保你的VS项目正在构建Win64目标。

我能够编译和提取64位GLFW二进制分发链接后,你的测试程序为c:\temp

C:\temp>cl /I c:\temp\glfw-2.7.7.bin.WIN64\include\GL test.cpp c:\temp\glfw-2.7.7.bin.WIN64\lib-msvc110\GLFWDLL.lib 
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.50727.1 for x64 
Copyright (C) Microsoft Corporation. All rights reserved. 

test.cpp 
Microsoft (R) Incremental Linker Version 11.00.50727.1 
Copyright (C) Microsoft Corporation. All rights reserved. 

/out:test.exe 
test.obj 
c:\temp\glfw-2.7.7.bin.WIN64\lib-msvc110\GLFWDLL.lib 

C:\temp> 
+0

或者安装32位版本的GLEW。另外需要注意的是,无论目标体系结构如何,OpenGL库总是被称为opengl32.dll/lib。 – datenwolf 2013-03-18 01:11:36

+0

我下载了64位版本的GLFW,因为我认为最好是下载与我的电脑相同的位架构。我应该得到32位吗?我试图将项目设置更改为Win32,因为这似乎是最合乎逻辑的,但唉,问题仍然存在。 – 2013-03-18 02:29:13

+0

不要忘记接受答案,如果它帮助你。 – sashoalm 2013-03-18 04:40:16

2

我得到了完全相同的错误消息。我注意到我的glfw文件夹中没有.lib文件,因为我下载了源码包,所以需要下载预编译的二进制文件, 然后我才开始工作; enter image description here

+0

谢谢你的回答。现在显而易见,我的文件夹中没有预编译的二进制文件,但我之前没有考虑过。 – Clonkex 2017-11-20 22:14:39