VC常見鏈結錯誤

2021-09-25 21:35:44 字數 1798 閱讀 1934

1、   lnk2019無法解析的外部符號 "void __cdecl tt_audi_searchcommand(int,unsigned char *)" (?tt_audi_searchcommand@@yaxhpae@z),該符號在函式 "unsigned int __cdecl tt_canbusmileageservicereset(int,unsigned char *,int)" (?tt_canbusmileageservicereset@@yaihpaeh@z) 中被引用    x431_vw_oilreset    c:\users\64129\documents\visual studio 2015\projects\x431\x431_vw_oilreset\funcoilreset.obj    1    生成    

原因:函式tt_audi_searchcommand有宣告,沒定義

2、1>libstd.obj : error lnk2019:無法解析的外部符號"void __cdecl dscalculate(unsigned char,unsigned char,unsigned char,char *)" (?dscalculate@@yaxeeepad@z),該符號在函式 "unsigned int __cdecl tt_specfuncshowbas(struct sysinfo *,unsigned char *,int)" (?tt_specfuncshowbas@@yaipausysinfo@@paeh@z) 中被引用

原因: 就是宣告和定義格式不一樣

3、1>funcoilreset.obj : error lnk2005:"unsigned int sysinfoid" (?sysinfoid@@3ia) 已經在funcepb.obj中定義

1>libstd.obj : error lnk2005: "unsigned int sysinfoid" (?sysinfoid@@3ia) 已經在funcepb.obj中定義

1>throttlebodyadaption.obj: error lnk2005: "unsigned int sysinfoid" (?sysinfoid@@3ia) 已經在 funcepb.obj 中定義

原因:多重定義,往往是由於全域性變數引起的;

我將extern unsigned int sysinfoid;//系統id 定義在 libstd.h中,然後 funoilreset 、 throttlexx.cpp、libstd.cpp 都去include "libstd.h"

這樣,就在三個cpp編譯成的obj中都有,導致重複定義;

解決方法1: 將全域性變數定義在乙個cpp中,在其他的檔案中使用extern unsigned int sysinfoid;

4、d_decode.obj : error lnk2005: "char * readpath" (?readpath@@3pada)已經在 head_decode.obj 中定義。

原因:同3,全域性變數的重複使用

解決方法2:當.cpp 太多的時候,在隨便乙個.cpp 中「定義」全域性變數(int b=0;),在乙個標頭檔案a.h中新增宣告 extern b;  ,然後在所有其他需要使用全域性變數b的.cpp 檔案中include 「a.h」

VC鏈結錯誤大全

vc 時經常會遇到鏈結錯誤lnk2001,該錯誤非常討厭,因為對於程式設計者來說,最好改的錯誤莫過於編譯錯誤,而一般說來發生連線錯誤時,編譯都已通過。產生連線錯誤的原因非常多,尤其lnk2001錯誤,常常使人不明其所以然。如果不深入地學習和理解vc 要想改正連線錯誤lnk2001非常困難。初學者在學...

VC常見錯誤總結

2010 02 08 22 47 09 分類 計算機和程式設計 標籤 bk1506 lnk4098 error vc 舉報 字型大小訂閱 1 fatal error c1010 在查詢預編譯頭時遇到意外的檔案結尾。是否忘記了向源中新增 include stdafx.h 解決 專案 屬性 配置屬性 c...

常見編譯鏈結錯誤

1.no such file or directory 首先檢查檔案路徑是否包含,如某標頭檔案不存在,一般是標頭檔案的路徑沒有include進來 其次檢查是否有巨集定義,巨集定義是否已生效。2.in function undefined 一般是鏈結錯誤,所需的的庫沒有鏈結編譯bin檔案時,鏈結了動態...