Visual C++ 編譯時,遇到「無法解析的外部符號」

Visual C++ 編譯時,遇到「無法解析的外部符號」

以前遇過解決後,就再也沒遇過了

這次又遇到,想說就把它寫下來


常用 Visual C++ 來寫程式的人

而且還會引用其他來源檔就常常會發生這種事

通常在編譯時會發生這個問題,通常是某個 Library (.lib)沒有被引用到

例如:DirectX,OpenGL,Cocos2D-X 等等的開發

當我們在新增專案時,順便把會用到的專案或 include 進來

寫的時候,透過 Visual Studio 的智慧型輸入能知道確實有引用進來

但在編譯的時候,卻會出錯

image

這問題在於忘了跟編譯器說,你需要用到某個 Library(.lib) 檔

解決的辦法如下:

首先,到專案的「屬性」

並到「組態屬性」->「連結器」->「輸入」

image

其中的「其他相依性」則是告訴編譯器,你需要引用哪些 lib 檔

如圖中的 opengl32.lib, glew32.lib…等等都是此專案會用到的 Library 檔

以我現在的這個專案錯誤為例

image

在最上面 include 的地方,已經把 Box2D.h 檔引用進來了

但卻忘了跟編譯器說,我需要哪個 lib 檔,所以會發生像第一張圖那樣的錯誤

於是我們在「其他相依性」的地方加入 「libBox2d.lib」

image

這樣就不會再出現「無法解析外部符號」的錯誤了


也許還有另外一個原因則是「子系統」的問題

如果應用程式是以「命令提示字元」呈現的話

則子系統則改為「主控台 (/SUBSYSTEM:CONSOLE)」

若為視窗化的應用程式

則子系統改為「Windows (/SUBSYSTEM:WINDOWS)」

這個方法也許也是導致「無法解析的外部符號」的原因。


這兩個原因是目前遇過的

若大家有更好的解決辦法或是其實是其他的原因導致的

也歡迎大家留言告知

感謝!! 微笑