用VS2017,Release X86進行編譯時顯示如下錯誤:
1>CWDMDlg.obj : error LNK2001: 無法解析的外部符號 __imp__CameraGetImageBuffer@16
1>CWDMDlg.obj : error LNK2001: 無法解析的外部符號 __imp__CameraImageProcess@16
1>CWDMDlg.obj : error LNK2001: 無法解析的外部符號 __imp__CameraImageOverlay@12
1>CWDMDlg.obj : error LNK2001: 無法解析的外部符號 __imp__CameraDisplayRGB24@12
1>CWDMDlg.obj : error LNK2001: 無法解析的外部符號 __imp__CameraReleaseImageBuffer@8
1>CWDMDlg.obj : error LNK2001: 無法解析的外部符號 _GT_GetSts@16
1>CWDMDlg.obj : error LNK2001: 無法解析的外部符號 _GT_Stop@8
1>CWDMDlg.obj : error LNK2001: 無法解析的外部符號 _GT_GetPrfPos@16
......
翻譯為英文為:error LNK2001: unresolved external symbol __imp__CameraGetImageBuffer@16(方便google)
最近在看《調試九法:軟硬件錯誤的排查之道》,決定按照里面學到的知識來解決上述問題。
1)理解系統。這兩部分錯誤分別與相機和電機有關。除了代碼本身,就是庫文件,找到這兩個對應的庫文件。了解一下dll和lib文件的一些特性。
根據 lib和dll的區別、生成以及使用詳解 中調用動態庫和靜態庫的方法,把相機和電機的動態庫和靜態庫添加到對應的位置。
之后,關於“error LNK2001: 無法解析的外部符號 _GT_XXX”的錯誤就消失了,還剩下相機的錯誤,發現Libray文件夾下有MVCAMSDK_X64.lib,在頭文件中添加如下語句:
#ifdef _WIN64 #pragma comment(lib,".\\Library\\MVCAMSDK_X64.lib") #else #pragma comment(lib,".\\Library\\MVCAMSDK.lib") #endif // _WIN64X
用Debug X64 編譯通過。問題解決。