無法解析的外部符號的幾種可能(lib方面的)(還有dll方面的,不在本文中)


無法解析的外部符號的幾種可能
 

1. lib 文件未引入。可使用“#pragma comment(lib, “winsock.lib”) ”語句添加 lib 引用,也可在項目依賴里添加。

2. 類方法的實現未加類標識。如, “CTest::Connect(void) { … }” 寫成了 “Connect(void) { … }”。

3. 缺少 obj 文件。在項目里添加“包含路徑”:C:/curl/lib/release-dll/*.obj。

4. 沒有將項目需要的頭文件、源文件都加入項目中,這個錯誤我犯了好幾次。

另外的一些解析:

當用Visual Studio 鏈接程序時,往往會產生”無法解析的外部符號“這一種錯誤,但是我們只能看到錯誤產生的位置是因為使用了某一個外部函數,我們暫且稱之為問題函數,所有使用這個問題函數的函數都會產生類似的錯誤難到是文件包含問題嗎?不是,即使include 了包含有這個問題函數的頭文件,錯誤依舊。開始抓頭皮了吧!先別急,仔細想一想問題所在。記得在手工敲命令行編譯匯編程序的時候,命令常常是一下這種情況:(一個很常見的編譯命令,假設這里用到了kernel32.lib ml /c /coff sample.asm link /subsystem:windows /entry:start /out:sample.exe sample.obj kernel32.lib 注意到后面的.lib文件,這就是問題的所在,我們如果用到了外部函數,即使源程序中已經寫明了包含kernel32.lib,也要在鏈接的時候寫入鏈接程序。 Visual Studio的鏈接程序默認寫入了很多常用到的庫文件,但是也難免有一些我們用的的沒有加入,所以解決辦法就是在編譯選項中加入問題函數所在的lib文件即可。在哪里加入呢?要么回到原始時代,用命令行編譯,要么點擊工程中的項目屬性,里面有一大堆的選項,挨個試試看要比我告訴你在哪里加入什么長的經驗多錯誤產生的原因是再補上一小段:原來產生這個錯誤的原因不只是因為這一個比如寫程序的風格是在一個獨立的頭文件中寫明類的定義,函數聲明,而且另一個源文件(cpp)中寫類成員函數的實現,和已聲明函數的實現,如果因為一點小小的拼寫錯誤導致兩者有點不一致,這種情況下,編譯器就不能識別了-當然編譯器也不好意思報錯,我們已經把函數聲明了呀!問題產生的原理是一樣的,還是編譯器找不到函數的實現部分--》廢話,不然怎么會產生同樣的錯誤呢!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM