Visual C++ 編譯時,遇到「無法解析的外部符號」
以前遇過解決後,就再也沒遇過了
這次又遇到,想說就把它寫下來
常用 Visual C++ 來寫程式的人
而且還會引用其他來源檔就常常會發生這種事
通常在編譯時會發生這個問題,通常是某個 Library (.lib)沒有被引用到
例如:DirectX,OpenGL,Cocos2D-X 等等的開發
當我們在新增專案時,順便把會用到的專案或 include 進來
寫的時候,透過 Visual Studio 的智慧型輸入能知道確實有引用進來
但在編譯的時候,卻會出錯
這問題在於忘了跟編譯器說,你需要用到某個 Library(.lib) 檔
解決的辦法如下:
首先,到專案的「屬性」
並到「組態屬性」->「連結器」->「輸入」
其中的「其他相依性」則是告訴編譯器,你需要引用哪些 lib 檔
如圖中的 opengl32.lib, glew32.lib…等等都是此專案會用到的 Library 檔
以我現在的這個專案錯誤為例
在最上面 include 的地方,已經把 Box2D.h 檔引用進來了
但卻忘了跟編譯器說,我需要哪個 lib 檔,所以會發生像第一張圖那樣的錯誤
於是我們在「其他相依性」的地方加入 「libBox2d.lib」
這樣就不會再出現「無法解析外部符號」的錯誤了
也許還有另外一個原因則是「子系統」的問題
如果應用程式是以「命令提示字元」呈現的話
則子系統則改為「主控台 (/SUBSYSTEM:CONSOLE)」
若為視窗化的應用程式
則子系統改為「Windows (/SUBSYSTEM:WINDOWS)」
這個方法也許也是導致「無法解析的外部符號」的原因。
這兩個原因是目前遇過的
若大家有更好的解決辦法或是其實是其他的原因導致的
也歡迎大家留言告知
感謝!!