最近在一個MFC工程文件中調用了多個dll和lib文件,包括matlab和can連接文件,時常出現“無法解析的外部符號”的錯誤,特此記錄解決方法。
通常出現這個問題的原因有以下幾個:
1.沒有導入相應的lib庫文件。
2.類成員聲明了,但是卻沒有定義。也可能是定義的與聲明的不一致。
3.沒有包含響應的頭文件和源文件。
4.沒有在項目屬性頁的鏈接器的命令行選項加入相應的類包。
5.沒有在c++包含目錄和庫目錄加入相應的類包路徑。
6.dll的版本與平台不兼容,64位和32位的差別。
通常對於第三方的SDK一般只提供給我們DLL,並提供相應的頭文件及LIB文件;這里的LIB文件是鏈接時需要的,它包含了DLL中函數的想關信息,不是靜態編譯產生的靜態庫,因此我們只需要在項目添加對這些LIB的依賴。
一般情況下按照項目--》屬性--》配置屬性--》鏈接器-》輸入--》附加依賴項
的方式在其中加入所需庫文件,注意把庫文件寫進去,每個庫文件后加分號,同時在
“鏈接器--》常規--》附加庫目錄”中填入相應庫所在目錄。
為了保險可以在
VC++目錄--》常規--》包含目錄和VC++目錄--》常規--》庫目錄中中填入相應庫所在目錄。
然后在工程文件中加入頭文件#include "ControlCAN.h"
以及
#pragma comment(lib,"ControlCAN.lib")
如果完成這些操作之后還是存在無法解析的外部符號的問題,應該是版本與平台不兼容。將當前平台(win32/x64)替換成(x64/win32)再進行編譯,一般就可以通過了。
需要再新的平台重新設置上述操作,並將目標計算機改為當前平台。