본문 바로가기
Lib/Visual Studio

LNK 2019 에러 대응 (unresolved external symbol)

by W00gie 2022. 1. 11.

일정 주기마다 나의 개발을 괴롭히는 링크에러 :(

 

링크에러 발생 시 확인해볼 주요사항은 다양하지만, 대부분의 경우 아래의 케이스에서 해결된다.

 

1.  header 파일 혹은 cpp 파일의 특정 함수를 누락한 경우

 

* 설명생략

 

2.  lib 파일을 누락한 경우

 

외부 라이브러리를 활용하는 경우 해당 프로젝트 내에 라이브러리 디렉토리 설정이 필요하다. 또한 dll 파일의 경우 동적 라이브러리 파일이라 부르는데, 이러한 파일들은 프로젝트의 빌드파일과 같은 위치에 있어야  해당 프로그램을 실행가능하다.

 

protobuffer 라이브러리의 dll파일

 

3. 프로젝트 구성과 다른 bit의 cpu로 빌드한 경우

 

이번 링크에러의 해결법을 포스팅하고 마음먹은 케이스다. 오늘 이 문제로 4시간가량을 날렸으니 다시 이런 실수를 반복하지않고자 기록을 결심했다. 비쥬얼 스튜디오 상단의 빌드옵션에 x64,x86,Any CPU 등 다양한 옵션이 존재한다.

대체로 프로젝트를 진행하고, 대체로 개발환경을 고정한 상태로 진행할테니 이런 실수를 반복하는 경우가 없겠지만, 해당 빌드옵션의 64, 32 빌드가 솔루션 위치를 변경하는 경우 Any Cpu 상태로 바뀌는 케이스가 있다.

+) 필자의 경우 라이브러리를 활용하기 위해 solution 파일을 다른 경로로 옮기고 솔루션 폴더를 열었더니 해당 옵션이 바꼈던 사항을 인지하지 못해, 수 차례 당시 공부하던 protobuffer 라이브러리에 화풀이를 했다. 

 

문제를 인지하고 다시 기존 옵션대로 (x32 -> x64) 설정을 변경하고 빌드해도 솔루션내에 다중 프로젝트로 구성되어있고, 프로젝트간에 종속성이 있는 경우 모든 프로젝트 파일에 전체적으로 리빌드과정이 필요하다

 

1. .vs폴더 삭제

숨긴 항목을 체크하면 확인 가능하다

2. 모든 프로젝트 rebuild 실행 ( build가 아닌 rebuild 중요)