LNK2005 すでに ~.obj で定義…

投稿日 by Iwao

このエラーは,複数のソースファイルに同じ関数などが定義されている場合に発生します.
別の表現をすると,リンク対象の obj や lib に同じ定義が含まれているということです.


次の様な関数のエラーは,プロジェクトの設定に問題があることがあります.

nafxcwd.lib(afxmem.obj) : error LNK2005: “void * __cdecl operator new(unsigned int)” (??2@YAPAXI@Z) はすでに LIBCD.lib(new.obj) で定義されています

https://dev.mish.work/wordpress/?s=lnk2005


他に,自前のコードでヘッダファイルに関数の実体を定義した場合にも発生します.
その場合はソースファイルに移すか,inline 関数として定義します.
base64.hxx


以下は個人的なもので,ちょっと異なる使い方で発生した時の対応です.


以前,ソースファイルに定義していたテーブルをヘッダファイルに.

struct	CL_function	{
	LPCTSTR	Lower ;
	int	FType ;
	} ;

CL_function	CL_fnc_tbl[] =	{
	_T("atan2") ,	ATAN2	,
	//  ...
	_T(" ") ,	FERROR	,
	_T("\0") ,	FERROR	,
	} ;
--------------------構成: pf_20 - Win32 Debug--------------------
コンパイル中...
ComPrj01.cpp
コードを生成中...
コンパイル中...
ComUse02.cpp
pf_20.cpp
pf_20Dlg.cpp
コードを生成中...
リンク中...
ComUse02.obj : error LNK2005: "struct CL_function * CL_fnc_tbl" (?CL_fnc_tbl@@3PAUCL_function@@A) はすでに ComPrj01.obj で定義されています
pf_20.obj : error LNK2005: "struct CL_function * CL_fnc_tbl" (?CL_fnc_tbl@@3PAUCL_function@@A) はすでに ComPrj01.obj で定義されています
pf_20Dlg.obj : error LNK2005: "struct CL_function * CL_fnc_tbl" (?CL_fnc_tbl@@3PAUCL_function@@A) はすでに ComPrj01.obj で定義されています
pf_20.exe - エラー 3、警告 0

テーブルを cpp から hpp に移して LNK2005
次の様に static を付けて対応したが,ヘッダには static を書いてはいけない 様な記述が多い.

static	CL_function	CL_fnc_tbl[] =	{
	//  ...
	} ;
この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です