1. LNK2019 오류란?
LNK2019 오류는 C++에서 발생하는 링크 오류(Linker Error) 중 하나로, 보통 "unresolved external symbol"이라는 메시지와 함께 나타납니다. 이는 컴파일 과정에서는 문제가 없지만, 링크 과정에서 특정 심볼(Symbol)을 찾지 못했을 때 발생합니다.
즉, 선언된 함수나 변수가 정의되지 않았거나, 올바른 라이브러리를 연결하지 않았을 때 발생하는 오류입니다.
2. LNK2019 오류의 주요 원인
LNK2019 오류는 여러 가지 원인으로 발생할 수 있습니다. 대표적인 원인은 다음과 같습니다.
(1) 함수 정의 누락
헤더 파일(.h)에서 함수를 선언했지만, 해당 함수의 정의(.cpp 파일에서 구현)가 없는 경우 발생합니다.
예제:
// Header.h
void myFunction(); // 함수 선언
// main.cpp
#include "Header.h"
int main() {
myFunction(); // 오류 발생 (정의 없음)
return 0;
}
위 코드에서는 myFunction
이 선언되었지만, 구현이 없기 때문에 LNK2019 오류가 발생합니다.
해결 방법: 해당 함수의 정의를 추가해야 합니다.
// Header.cpp
#include "Header.h"
void myFunction() {
// 함수 구현
}
(2) 오타 및 잘못된 함수 시그니처
함수의 선언과 정의가 다를 경우에도 발생할 수 있습니다.
예제:
// Header.h
void myFunction(int a);
// Header.cpp
void myFunction() { // 매개변수가 다름
}
이 경우, 링커가 void myFunction(int)
를 찾지만, void myFunction()
만 정의되어 있어 오류가 발생합니다.
해결 방법: 함수 선언과 정의를 동일하게 맞춰야 합니다.
// Header.cpp
void myFunction(int a) {
// 함수 구현
}
(3) 정적 라이브러리(.lib) 누락
외부 라이브러리를 사용할 때, 해당 라이브러리를 프로젝트에 추가하지 않으면 발생할 수 있습니다.
해결 방법:
- 프로젝트 설정에서
.lib
파일을 추가하거나, #pragma comment(lib, "library_name.lib")
를 추가합니다.
(4) C++에서 C 함수를 호출할 때 extern "C"
누락
C++ 코드에서 C 언어로 작성된 함수를 호출할 때 extern "C"
를 선언하지 않으면 이름 변환(Name Mangling) 문제로 LNK2019 오류가 발생할 수 있습니다.
해결 방법:
// C 라이브러리 헤더 (mycfile.h)
#ifdef __cplusplus
extern "C" {
#endif
void myCFunction();
#ifdef __cplusplus
}
#endif
(5) 빌드 구성(Debug/Release) 불일치
Debug 빌드에서 생성된 라이브러리를 Release 모드에서 사용하려 하면 오류가 발생할 수 있습니다.
해결 방법: 프로젝트 설정에서 Debug와 Release를 동일한 모드로 설정합니다.
3. 결론
LNK2019 오류는 주로 "함수가 선언되었지만 정의되지 않은 경우" 발생하는 링크 오류입니다. 함수 정의 추가, 라이브러리 경로 확인, extern "C"
선언 등 원인에 맞는 해결 방법을 적용하면 쉽게 해결할 수 있습니다.
LNK2019 오류를 마주했을 때는 다음을 확인하세요:
- 함수 선언과 정의가 일치하는가?
- 필요한 라이브러리를 프로젝트에 추가했는가?
- 빌드 구성(Debug/Release)이 일치하는가?
이제 LNK2019 오류를 효과적으로 해결할 수 있겠죠? 오류를 만났을 때 당황하지 말고 차근차근 원인을 분석해 보세요!