1. 程式人生 > >error:LNK2005 已經在*.obj中定義

error:LNK2005 已經在*.obj中定義

實習專案中涉及到靜態庫的編寫,在用例項除錯靜態庫的時候,遇到LNK2005重複定義錯誤:已經在“*.obj”中定義。

上網搜了一下,總結有如下幾種情況:

1、重複定義全域性變數

全域性變數是針對整個工程的,在一個CPP檔案的定義:int nCount;那麼在使用的CPP檔案中就應該使用extern int nCount即可,如果還是使用int nCount 就會產生LNK2005錯誤;

根據C++標準的規定,一個變數是宣告,必須同時滿足兩個條件,否則就是定義:

1)使用extern 關鍵字 2)不能給變數賦初值

2、標頭檔案的重複包含

包含的標頭檔案中含有變數、函式、類的定義,在其他使用的地方多次包含,造成重複包含,產生LNK2005錯誤,

有兩種解決方法:

1)使用巨集 在標頭檔案head.h中加入

 #ifndef HEAD_H_ 

#define HEAD_H_

......

#endif

2)使用預編譯,檔案開頭加入

#pragma once

3、使用第三方庫造成

主要情形是C執行期函式庫和MFC的庫衝突造成的。具體的方法就是將提示出錯的庫放到另一個庫的前面。

舉例:

#include <WinSock2.h>
//WinSock2.h標頭檔案必須在Windows.h之前
#include <Windows.h>