FLoat.obj : error LNK2001: unresolved external symbol _printg Debug/FLoat.exe : fatal error LNK1120: 1 unresolved externals 執行 link.exe 時出錯.
程式碼中將 printf 誤拼為 printg:
// 錯誤寫法
printg("%f", a);
| 階段 | 發生情況 |
|---|---|
| 編譯 | 通過。編譯器僅檢查語法,printg 被視為外部函式宣告,假設其定義在其他檔案 |
| 連結 | 失敗。連結器在標準庫與所有目標檔中找不到 _printg(前綴 _ 為 C 語言修飾名稱慣例)的定義 |
// 正確寫法
printf("%f", a);
| 錯誤代碼 | 常見原因 | 解決方向 |
|---|---|---|
| LNK2001 | 函式名稱拼寫錯誤、缺少函式定義、未連結必要的 .lib 檔 | 檢查拼寫、補全實作、專案設定加入庫檔 |
| LNK2005 | 符號重複定義(如標頭檔定義變數/函式、多檔案定義同名全域變數) | 標頭檔用 extern、實作放 .c 檔、避免重複包含 |
| LNK1120 | LNK2001 的統計摘要,表示有 N 個未解析符號 | 解決所有 LNK2001 即自動消失 |
現代編譯器(GCC、Clang、MSVC)若開啟警告,編譯階段就能攔截此類錯誤:
// GCC/Clang
warning: implicit declaration of function 'printg' [-Wimplicit-function-declaration]
// MSVC (/Wall)
warning C4013: 'printg' undefined; assuming extern returning int
建議:專案設定啟用最高警告等級(-Wall -Wextra 或 /W4),並視警告為錯誤(-Werror / /WX),在編譯期即可發現拼寫錯誤。
printf、scanf、malloc 等)#include <stdio.h>)-lm 連結 math.h 數學函式)「編譯錯誤是朋友,連結錯誤是敵人,執行期錯誤是噩夢。」——養成閱讀警告訊息的習慣,能省下大量除錯時間。