2015-06-27 79 views
3

我無法在Visual Studio 2013 C++項目中鏈接靜態庫。Visual Studio 2013 C++鏈接靜態庫glew,虛擬機上的glfw

  1. 我下載了最新的GLEW-1.11.0-win32和GLFW-3.1.1.bin.WIN32
  2. 設定的路徑,包括目錄 (項目屬性> C/C++ 「附加包含目錄」)

    C:\Users\User\Documents\Visual Studio 2013\Projects\OpenGL\OpenGL\Common 
    
  3. 添加路徑LIB文件 (項目屬性>鏈接>常規 「附加庫目錄」)

    C:\Users\User\Documents\Visual Studio 2013\Projects\OpenGL\OpenGL\Common\Libs 
    
  4. 添加庫名 (項目屬性>鏈接>輸入 「附加依賴」)

    glew32.lib 
    glfw3.lib 
    
  5. 定義preprocesor GLEW_STATIC(當我刪除此纔看得到)

    (project Properties > C/C++ > Preprocessor "Preprocessor Definitions") 
    

當我建立我的項目以下錯誤發生:

Error 1 error LNK2001: unresolved external symbol _glewExperimental C:\Users\User\documents\visual studio 2013\Projects\OpenGL\OpenGL\Source.obj OpenGL 
Error 2 error LNK1120: 1 unresolved externals C:\Users\User\documents\visual studio 2013\Projects\OpenGL\Debug\OpenGL.exe OpenGL 

當我想這COMPLE

#include<Windows.h> 


#include<GL\glew.h> 
#include<GLFW\glfw3.h> 

#include<iostream> 

GLFWwindow * window; 

using namespace std; 

int main() 
{ 
    glewExperimental = TRUE; 
    GLenum error = glewInit(); 
    if (error != GLEW_OK) 
    { 
     cout << "Error!" << endl; 
    } 

    system("pause"); 

    return 0; 
} 

的Windows 8.1當前虛擬機(VirtualBox的)和Mirosoft的Visual Studio 2013

我做錯了嗎?在此論壇的其他主題中,此解決方案可正常工作。

當我從目錄中刪除這兩個庫時,我得到了同樣的錯誤,所以可能Visual沒有看到這兩個庫。但路徑設置正確。包含路徑作品,所有頭文件都可以通過intelsense查看。

+0

看着[文檔在這裏](http://glew.sourceforge.net/install.html),在我看來,'glew32.lib'不是實際的靜態庫,而只是一個導入庫'glew32.dll'。該文件似乎意味着您需要實際構建源代碼以便靜態鏈接到它。 – bogdan

+0

你知道該怎麼做嗎?每個教程都是關於鏈接自己的dll庫。我發現了這個[link](http://blog.nuclex-games.com/2012/03/how-to-consume-dlls-in-visual-cxx/comment-page-1/),但它沒有起作用。任何想法? – Szczepan

+0

我從GLEW網站下載了二進制包,發現在'lib \ Release \ Win32'目錄下,'glew32.lib'旁邊還有'glew32s.lib'。我有一個偷偷的懷疑,那個's'是你正在尋找的實際的靜態庫。因此,在「附加依賴關係」中只進行這種更改並再次嘗試(在您的設置中,其他一切似乎都很好,而且我在前面的評論中引用的文檔似乎已過時 - [此其他頁面](http:// glew .sourceforge.net/build.html)表示,預編譯的靜態庫應該包含在二進制Windows包中)。 – bogdan

回答

2

@bogdan是正確的:GLEW的靜態庫版本是glew32s.lib

順便提一句,sourceforge.net上的GLEW installation page表示如果你想要靜態鏈接,你必須「包含glew.h和glew.c到你的項目中。」雖然這聽起來很容易,但對於每個OpenGL項目來說,這看起來不必要的粗糙。相反,做到以下幾點:

  • 添加GLEW_STATIC宏觀調控下屬性 - 通用屬性 - C/C++ - 預處理 - 預處理定義
  • 添加glew32s.lib屬性 - 通用屬性 - 鏈接器 - 輸入 - 附加庫依賴項
  • 如果您沒有複製glew32s。LIB到Visual Studio中的默認庫路徑之一,路徑添加到它下下屬性 - 通用屬性 - 鏈接器 - 常規 - 附加庫目錄

爲我工作。

如果您不知道這一點,您可以添加新的性能表,例如, openglPropertySheet32Static,在物業管理查看菜單 - 其他窗口 - 物業管理)。將你的openGL特定屬性添加到它。不要忘記明確保存表格 - 我不確定它是否會自動保存在項目中。然後,你需要爲未來的OpenGL項目做的事情是添加現有的屬性表,openglPropertySheet32Static,在物業經理(你記得你保存它的地方,對嗎?)。

+0

美麗。經過幾個小時尋找解決我的愚蠢的DLL問題。 – finnrayment