'링크오류'에 해당되는 글 1건

  1. 2025.03.04 LNK2019 오류의 원인과 해결 방법
C++2025. 3. 4. 11:06

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 오류를 마주했을 때는 다음을 확인하세요:

  1. 함수 선언과 정의가 일치하는가?
  2. 필요한 라이브러리를 프로젝트에 추가했는가?
  3. 빌드 구성(Debug/Release)이 일치하는가?

이제 LNK2019 오류를 효과적으로 해결할 수 있겠죠? 오류를 만났을 때 당황하지 말고 차근차근 원인을 분석해 보세요!

Posted by gulner