일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 파이썬
- Yes
- I'm Sorry
- 웹개발
- 컴퓨터과학
- 코딩
- 데이터베이스
- 자바스크립트
- 보안
- 소프트웨어
- 자료구조
- 빅데이터
- 머신러닝
- 소프트웨어공학
- 네트워크
- 인공지능
- 프로그래밍언어
- 네트워크보안
- 2
- 프로그래밍
- 딥러닝
- 데이터과학
- 클라우드컴퓨팅
- 알고리즘
- 데이터분석
- 컴퓨터공학
- 버전관리
- 데이터구조
- 사이버보안
- 컴퓨터비전
- Today
- Total
스택큐힙리스트
LNK2005: VC++에서 이미 정의된 삭제 오류 본문
저는 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 오류를 피하고 효과적인 개발을 할 수 있도록 노력해야 합니다.