2013-03-18 68 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