스택큐힙리스트

LNK2005: VC++에서 이미 정의된 삭제 오류 본문

카테고리 없음

LNK2005: VC++에서 이미 정의된 삭제 오류

스택큐힙리스트 2023. 8. 25. 19:53
반응형

저는 VC++ 초보자라서 어리석은 질문이라면 용서해주세요.

저는 한 프로젝트 아래에서 7개의 솔루션을 가지고 있습니다. 이 중 6개는 정적 라이브러리를 빌드하여 7번째에서 연결하여 exe를 생성합니다. 모든 프로젝트의 런타임 구성은 MultiThreaded Debug입니다.

exe를 생성하는 데 사용되는 sln은 MFC를 사용하고, 다른 slns는 표준 런타임 라이브러리를 사용합니다. MFC로 변경해 보았지만, 여전히 동일한 오류가 발생합니다.

6개의 sln 모두 성공적으로 빌드합니다.

exe를 빌드하려고 할 때 다음과 같은 오류가 발생합니다:

#@!'nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *,int,char const *,int)" (??3@YAXPAXHPBDH@Z) already defined in tara_common.lib(fileStream.obj)

'#@!

이게 이상한 건 tara_common이 내가 생성한 라이브러리 중 하나이고 fileStream.cpp는 포인터에 대해 delete만 사용하는 파일이기 때문입니다.

저는 상세 모드로 만들었으므로, 출력을 첨부합니다.

#@!'ENVIRONMENT SPACE

_ACP_ATLPROV=C:\Program Files\Microsoft Visual Studio 9.0\VC\Bin\ATLProv.dll

_ACP_INCLUDE=C:\Program Files\Microsoft Visual Studio 9.0\VC\include;C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include;C:\Program Files\Microsoft SDKs\Windows\v6.0A\\include;C:\Program Files\Microsoft SDKs\Windows\v6.0A\include

_ACP_LIB=C:\fta\tara\database\build\Debug;C:\Program Files\Microsoft Visual Studio 9.0\VC\lib;C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\lib;C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\lib\i386;C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib;C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib;C:\Program Files\Microsoft Visual Studio 9.0\;C:\Program Files\Microsoft Visual Studio 9.0\lib

_ACP_PATH=C:\Program Files\Microsoft Visual Studio 9.0\VC\bin;C:\Program Files\Microsoft SDKs\Windows\v6.0A\\bin;C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\bin;C:\Program Files\Microsoft Visual Studio 9.0\Common7\tools;C:\Program Files\Microsoft Visual Studio 9.0\Common7\ide;C:\Program Files\HTML Help Workshop;C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin;c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 9.0\;C:\WINDOWS\SysWow64;;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Microsoft Visual Studio 9.0\VC\bin;C:\Program Files\GnuWin32\bin;C:\Python26

ALLUSERSPROFILE=C:\Documents and Settings\All Users

CLIENTNAME=Console

CommonProgramFiles=C:\Program Files\Common Files

ComSpec=C:\WINDOWS\system32\cmd.exe

FP_NO_HOST_CHECK=NO

HOMEDRIVE=C:

INCLUDE=C:\Program Files\Microsoft Visual Studio 9.0\VC\include;C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include;C:\Program Files\Microsoft SDKs\Windows\v6.0A\\include;C:\Program Files\Microsoft SDKs\Windows\v6.0A\include

LIB=C:\fta\tara\database\build\Debug;C:\Program Files\Microsoft Visual Studio 9.0\VC\lib;C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\lib;C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\lib\i386;C:\Program Files\Microsoft SDKs\Windows\v6.0A\\lib;C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib;C:\Program Files\Microsoft Visual Studio 9.0\;C:\Program Files\Microsoft Visual Studio 9.0\lib

LIBPATH=c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\lib;C:\Program Files\Microsoft Visual Studio 9.0\VC\lib

LOGONSERVER=\\xxx

NUMBER_OF_PROCESSORS=1

OS=Windows_NT

PATH=C:\Program Files\Microsoft Visual Studio 9.0\VC\bin;C:\Program Files\Microsoft SDKs\Windows\v6.0A\\bin;C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\bin;C:\Program Files\Microsoft Visual Studio 9.0\Common7\tools;C:\Program Files\Microsoft Visual Studio 9.0\Common7\ide;C:\Program Files\HTML Help Workshop;C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin;c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 9.0\;C:\WINDOWS\SysWow64;;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;c:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Microsoft Visual Studio 9.0\VC\bin;C:\Program Files\GnuWin32\bin;C:\Python26

PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH

PROCESSOR_ARCHITECTURE=x86

PROCESSOR_IDENTIFIER=x86 Family 6 Model 23 Stepping 10, GenuineIntel

PROCESSOR_LEVEL=6

PROCESSOR_REVISION=170a

ProgramFiles=C:\Program Files

SESSIONNAME=Console

SystemDrive=C:

SystemRoot=C:\WINDOWS

VisualStudioDir=C:\Documents and Settings\sgupta\My Documents\Visual Studio 2008

VS90COMNTOOLS=C:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\

WecVersionForRosebud.710=2

windir=C:\WINDOWS

COMMAND LINES:

Creating temporary file "c:\fta\tools\channel_editor\IvoDB\Debug\RSP00011018082288.rsp" with contents

[

/VERBOSE /OUT:"C:\fta\tools\channel_editor\\Builds\IvoDB_1_35_Debug.exe" /INCREMENTAL /LIBPATH:"..\..\..\3rdparty\boost_1_42_0\stage\lib" /MANIFEST /MANIFESTFILE:"Debug\IvoDB_1_35_Debug.exe.intermediate.manifest" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DELAYLOAD:"OleAcc.dll" /DEBUG /PDB:"C:\fta\tools\channel_editor\Builds\IvoDB_1_35_Debug.pdb" /SUBSYSTEM:WINDOWS /DYNAMICBASE /NXCOMPAT /MACHINE:X86 ..\..\..\tara\database\build\Debug\tara_database.lib ..\..\..\tara\common\build\Debug\tara_common.lib ..\..\..\3rdparty\sqliteWrapper\Debug\sqliteWrapper.lib ..\..\..\3rdparty\sqlite_3_6_18\Debug\sqlite.lib ..\..\..\stsdk\modules\win32\Debug\modules.lib ..\..\..\stsdk\axeapi\win32\Debug\axeapi.lib DelayImp.lib

".\Debug\AntennaSettings.obj"

".\Debug\AudioVideoSettings.obj"

".\Debug\CMDatabase.obj"

".\Debug\CMSettings.obj"

".\Debug\ColorFileDialog.obj"

".\Debug\ColorStatic.obj"

".\Debug\DragDropListCtrl.obj"

".\Debug\DragDropTreeCtrl.obj"

".\Debug\FavouriteEdit.obj"

".\Debug\FavTab.obj"

".\Debug\FindProgram.obj"

".\Debug\HyperLink.obj"

".\Debug\IvoDB.obj"

".\Debug\IvoDBDlg.obj"

".\Debug\IvoDBInfo.obj"

".\Debug\IvoDBInfoTab.obj"

".\Debug\IvoDbStruct.obj"

".\Debug\LayoutHelper.obj"

".\Debug\MainTab.obj"

".\Debug\OperTabCtrl.obj"

".\Debug\ParentalLock.obj"

".\Debug\ProgramEdit.obj"

".\Debug\ProgramTab.obj"

".\Debug\PVRSettings.obj"

".\Debug\SatTab.obj"

".\Debug\SettingsBase.obj"

".\Debug\SettingsTab.obj"

".\Debug\STBSettings.obj"

".\Debug\stdafx.obj"

".\Debug\TimeDate.obj"

".\Debug\TransponderEdit.obj"

".\Debug\TreeTab.obj"

".\Debug\UserPreferences.obj"

".\Debug\Xmodem.obj"

".\Debug\IvoDB.res"

".\Debug\IvoDB_1_35_Debug.exe.embed.manifest.res"

]

Creating command line "link.exe @c:\fta\tools\channel_editor\IvoDB\Debug\RSP00011018082288.rsp /NOLOGO /ERRORREPORT:PROMPT"

**Processed /DEFAULTLIB:atlsd.lib

Processed /DEFAULTLIB:ws2_32.lib

Processed /DEFAULTLIB:mswsock.lib

Processed /DISALLOWLIB:mfc90d.lib

Processed /DISALLOWLIB:mfcs90d.lib

Processed /DISALLOWLIB:mfc90.lib

Processed /DISALLOWLIB:mfcs90.lib

Processed /DISALLOWLIB:mfc90ud.lib

Processed /DISALLOWLIB:mfcs90ud.lib

Processed /DISALLOWLIB:mfc90u.lib

Processed /DISALLOWLIB:mfcs90u.lib

Processed /DISALLOWLIB:uafxcwd.lib

Processed /DISALLOWLIB:uafxcw.lib

Processed /DISALLOWLIB:nafxcw.lib

Found "void __cdecl operator delete(void *)" (??3@YAXPAX@Z)

Referenced in axeapi.lib(ipcgeneric.obj)

Referenced in axeapi.lib(ipccommon.obj)

Referenced in axeapi.lib(activeobject.obj)

Referenced in nafxcwd.lib(nolib.obj)

Referenced in sqliteWrapper.lib(DbConnection.obj)

Referenced in sqliteWrapper.lib(Statement.obj)

Referenced in axeapi.lib(nvstorage.obj)

Referenced in axeapi.lib(avctrler.obj)

Referenced in tara_common.lib(trace.obj)

Referenced in tara_common.lib(ssPrintf.obj)

Referenced in tara_common.lib(taraConfig.obj)

Referenced in tara_common.lib(stream.obj)

Referenced in tara_common.lib(STBConfigurationStorage.obj)

Referenced in tara_common.lib(STBConfiguration.obj)

Referenced in tara_common.lib(configParser.obj)

Referenced in tara_common.lib(fileStream.obj)

Referenced in tara_database.lib(SatStream.obj)

Referenced in tara_database.lib(Service.obj)

Referenced in tara_database.lib(ServiceList.obj)

Referenced in tara_common.lib(playerConfig.obj)

Referenced in UserPreferences.obj

Referenced in Xmodem.obj

Referenced in tara_database.lib(init.obj)

Referenced in tara_database.lib(Satellite.obj)

Referenced in TransponderEdit.obj

Referenced in TreeTab.obj

Referenced in TreeTab.obj

Referenced in UserPreferences.obj

Referenced in stdafx.obj

Referenced in TimeDate.obj

Referenced in TimeDate.obj

Referenced in TransponderEdit.obj

Referenced in SettingsTab.obj

Referenced in SettingsTab.obj

Referenced in STBSettings.obj

Referenced in STBSettings.obj

Referenced in SatTab.obj

Referenced in SatTab.obj

Referenced in SettingsBase.obj

Referenced in SettingsBase.obj

Referenced in ProgramTab.obj

Referenced in ProgramTab.obj

Referenced in PVRSettings.obj

Referenced in PVRSettings.obj

Referenced in ParentalLock.obj

Referenced in ParentalLock.obj

Referenced in ProgramEdit.obj

Referenced in ProgramEdit.obj

Referenced in MainTab.obj

Referenced in MainTab.obj

Referenced in OperTabCtrl.obj

Referenced in OperTabCtrl.obj

Referenced in IvoDBInfoTab.obj

Referenced in IvoDbStruct.obj

Referenced in LayoutHelper.obj

Referenced in LayoutHelper.obj

Referenced in IvoDBDlg.obj

Referenced in IvoDBInfo.obj

Referenced in IvoDBInfo.obj

Referenced in IvoDBInfoTab.obj

Referenced in HyperLink.obj

Referenced in IvoDB.obj

Referenced in IvoDB.obj

Referenced in IvoDBDlg.obj

Referenced in FavTab.obj

Referenced in FavTab.obj

Referenced in FindProgram.obj

Referenced in FindProgram.obj

Referenced in DragDropTreeCtrl.obj

Referenced in DragDropTreeCtrl.obj

Referenced in FavouriteEdit.obj

Referenced in FavouriteEdit.obj

Referenced in ColorFileDialog.obj

Referenced in ColorStatic.obj

Referenced in DragDropListCtrl.obj

Referenced in DragDropListCtrl.obj

Referenced in CMDatabase.obj

Referenced in CMDatabase.obj

Referenced in CMSettings.obj

Referenced in CMSettings.obj

Referenced in AntennaSettings.obj

Referenced in AntennaSettings.obj

Referenced in AudioVideoSettings.obj

Referenced in AudioVideoSettings.obj

Loaded nafxcwd.lib(afxmem.obj)

nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *,int,char const *,int)" (??3@YAXPAXHPBDH@Z) already defined in tara_common.lib(fileStream.obj)**

'#@!

제발 도와주세요. 이미 인터넷에서 3일을 낭비하며 찾은 모든 가능한 해결책을 시도했습니다.

미리 감사드립니다,

SG

답변 1

일반적으로 이는 실행 가능한 파일 (.EXE 및 .DLL)을 링크하려고 하면 런타임 라이브러리의 다른 버전을 링크하려는 것을 의미합니다. (DLL을 함께 묶거나 EXE 파일에 링크하는 경우에는 일반적으로 RTL의 동적 버전을 사용해야 합니다.)

답변 2

LNK2005: VC++에서 이미 정의된 오류 삭제

소프트웨어 개발 중 LNK2005 오류는 프로그래밍 언어 중 하나인 Visual C++ (VC++)에서 주로 발생하는 문제입니다. 이 오류는 이미 정의된 심볼, 변수 또는 함수가 중복하여 선언되어 발생하는 것으로 알려져 있습니다. 이러한 중복 정의는 코드의 일관성을 해치고, 프로그램이 예상치 못한 동작이나 심각한 버그를 유발할 수 있습니다.

LNK2005 오류 메시지는 일반적으로 "error LNK2005: already defined in"과 같은 형식으로 나타납니다. 이 오류가 발생하는 이유는 헤더 파일(.h)에 함수 또는 변수의 정의가 포함되어 있으며, 이를 여러 소스 파일(.cpp)에서 모두 포함하여 컴파일할 경우 발생합니다. 컴파일러는 이러한 중복 정의를 해결할 수 없기 때문에 오류가 발생하게 됩니다.

이 문제를 해결하기 위해 여러 가지 방법이 있습니다. 가장 일반적인 해결책은 헤더 파일에 선언만 포함하고, 정의는 소스 파일에서 수행하는 것입니다. 그러면 헤더 파일을 여러 소스 파일에서 포함하는 경우 중복 정의 오류가 발생하지 않게 됩니다. 또 다른 방법은 정적 변수의 경우 'extern' 키워드를 사용하여 중복 정의를 피하는 것입니다. 이렇게 하면 변수가 다른 소스 파일에서 정의될 수 있도록 하는 동시에 중복 정의를 피할 수 있습니다.

또한, LNK2005 오류는 플러그인 방식으로 코드를 작성하는 경우 발생할 수도 있습니다. 이런 경우에는 플러그인이 참조하는 모든 함수와 변수를 동적 라이브러리(.dll) 파일로 분리하여 중복 정의 오류를 피할 수 있습니다. 한편, 프로젝트 빌드 설정에서 링커(Linker) 옵션을 조정하여 중복 정의 오류를 방지할 수도 있습니다. 예를 들어, "Ignore All Default Libraries" 옵션을 사용하여 기본 라이브러리의 중복 정의를 방지하거나, "Multi-threaded Debug" 옵션을 "Multi-threaded"로 변경하여 런타임 라이브러리의 중복 정의를 피할 수 있습니다.

이처럼 LNK2005 오류는 VC++에서 이미 정의된 심볼이 중복 정의될 때 발생하는 문제입니다. 이로 인해 코드의 일관성 문제와 예상치 못한 동작 또는 버그가 발생할 수 있으므로, 중복 정의 오류를 해결하여 안정적이고 효율적인 프로그램을 개발해야 합니다. 다양한 해결책을 이용하여 LNK2005 오류를 피하고 효과적인 개발을 할 수 있도록 노력해야 합니다.

반응형
Comments