LNK2001 Error
멀쩡하게 컴파일되던 프로젝트가 Error가 발생한다.
분명히 뭔가를 한것 같은데 기억은 잘 안난다.
소스코드를 크게 수정한것도 아닌데 말이다...ㅜㅜ
예전에도 이 문제 때문에 한참을 고생했던 기억이 난다.
그런데 어떻게 해결 했는지는 기억이 나지 않는다.
이번에 또 같은 문제를 만난김에 기록해 둬야 겠다.
컴파일을 하면 아래 사진과 같이 LNK2001 Error가 발생한다.
LNK2001 Error는 정의는 되어 있는데 선언이 되어 있지 않은 경우에 발생한다.
컴파일 에러는 발생하지 않지만 Link 동작시에 선언부가 없어서 에러가 발생하는 것이다.
프로젝트 어디에도 해당 함수나 클래스를 사용하는 곳이 없는데....
아무리 뒤져봐도 소스상의 문제는 찾을 수 없었다. 다행히 작업전에 백업해 두었던 소스가 있어서
컴페어로 비교를 해보니 clw 파일이 틀린거다.
A라는 프로젝트에 B라는 프로젝트를 추가해서 사용하고 있었는데
A라는 프로젝트의 clw 파일에 B프로젝트의 파일이 들어가 있지 않은가.
그래서 A프로젝트의 File View를 열어서 보니 문제의 파일(Trouble.cpp)이 프로젝트에 들어가 있는것을 볼 수 있었다.
이파일을 삭제해 주었더니 문제가 해결되었다. 예전에 마우스 클릭을 잘못해서 문제가 발생된것으로 생각했지만.
VC6.0의 버그인것으로 생각된다. 다시는 이문제로 고생하지 말아야지..
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
방금 작업하다가 같은 현상이 발생 되었는데 A 프로젝트를 활성화 시켜서 작업하다가
B 프로젝트의 파일을 고치는 작업을 하다보면 Visual Studio가 해당파일을 추가하겠냐고 물어본다.
메세지 박스를 잘 읽어보지 않고 YES 버튼을 누른것이 화근이구나....-_-;;;;;
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
실제로 띄는 메세지는 아래와 같다.
이메세지가 뜨는 경우는
1. A프로젝트와 B 프로젝트에 CCommon 이라는 클래스가 있다.
2. A프로젝트가 활성화 된 상태에서 B 프로젝트의 Common.cpp를 수정하고 있다.
3. CCommon class에 멤버변수를 추가하고 싶어서 F12를 이용하여 CComm의 헤더파일로 이동한다.
이때 헤더파일은 B 프로젝트의 Common.h가 아니라 A 프로젝트의 Common.h이다.
4. B 프로젝트의 Common.cpp를 모두 수정하고 Ctrl+F7을 눌러서 컴파일을 시도하면 위 메세지가 뜬다.
5. Yes를 누르게 되면 A프로젝트에 해당 파일이 추가 되면서 LNK Error 및 컴파일 Error를 유발 시킨다.