ホーム » VC » LNK2005 すでに ~.obj で定義…

2020年4月
 1234
567891011
12131415161718
19202122232425
2627282930  

カテゴリー

アーカイブ

ブログ統計情報

  • 87,729 アクセス


LNK2005 すでに ~.obj で定義…

このエラーは,複数のソースファイルに同じ関数などが定義されている場合に発生します.
別の表現をすると,リンク対象の 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[] =	{
	//  ...
	} ;
Is this 投稿 useful? Useful Useless 0 of 0 people say this 投稿 is useful.

コメントする

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

%d人のブロガーが「いいね」をつけました。