방프리

17.01.03 Lnk2005 에러 해결 방법 본문

C++/LnkError관련

17.01.03 Lnk2005 에러 해결 방법

방프리 2020. 1. 24. 17:28

LNK2005 에러로 몇 시간동안 헤맸었다. 이 에러를 고치면서 발생원인이나 해결 방법 여러 개를

찾아보았는데 한번 정리해볼까 한다.

 

1. 헤더파일이 중복으로 선언된 경우 

보통 이 경우는 그리 많이 발생되지 않을 것이라 생각된다. LNK2005 에러가 발생하는 주 원인이기는 하나

현재 Visual Studio에서 클래스를 생성하면 자동으로 #pragma once를 선언해주기 때문에 헤더 중복 선언이 일어나지 않을 것이기

때문이다. 일어난다면 아주 옛날 버전의 프로젝트에서 발생된 확률이 매우 크다. 

해결방법으로는 #ifdef !defined _STDIO_H \n #define _STDIO_H 이렇게 해주면 된다.

 

2. 문제의 모듈을 찾아 순서대로 적용하는 것이다. 

- 링커 -> 명령줄에서 /verbose를 적용한 뒤 디버깅을 돌리면 lib파일이 적용되는 순서나 .cpp파일이 적용되는 순서를

Output목록에서 확인이 가능하다. 이것을 통해 lib파일의 입력 순서를 바꾸어보거나

.cpp파일에서 문제점을 찾아보면 된다. 

 

3. 에러 메시지의 lib파일을 확인 후 고치기

- 내가 해결한 방법이다. 특별한 것은 없고 내가 겪은 에러의 경우 기존의 프로젝트에 있는 클래스의 명칭이 MFC기본 라이브러리 클래스

명칭이 겹쳐서 중복 선언되어 발생된 에러였기 때문이었다.

(얼마나 오래 되었으면...) 나의 경우는 기존의 클래스의 이름을 바꾸어 디버깅을 돌리니 해결되었다. 

이 에러가 발생된다면 어떤 라이브러리 파일에서 발생되었는지 그 라이브러리파일이 사용자 정의 파일인지

기본 컴파일러 라이브러리 파일인지 잘 확인하고 대처해야한다. 

 

*P.S 이 에러가 발생하면서 

LNK1169: one or more multiply defined symbols found in game programming

이딴 에러가 발생하였는데 에러 메시지 하나 더 늘었다고 짜증낼 필요 없다.

 

저 에러 때문에 일어나는거니깐 

Comments