728x90
이 오류는 컴파일은 되었지만, 링커가 특정 함수의 정의를 찾지 못했을 때 발생합니다. 즉, 호출된 함수의 이름은 존재하지만 실제 구현이 존재하지 않는 경우입니다.
보통 함수 선언만 존재하고 본문 구현이 빠졌거나, 함수가 다른 파일에 정의되어 있는데 컴파일 대상에서 누락되었을 때 자주 발생합니다. 함수 이름의 오타, 매개변수 불일치, 정적(static) 선언으로 인한 범위 제한 등도 원인이 될 수 있습니다.
다음은 오류가 발생하는 예시입니다.
#include <stdio.h>
void greet(); // 선언만 존재
int main() {
greet(); // 정의가 없기 때문에 링크 에러 발생
return 0;
}
컴파일러는 통과하지만 링커는 다음과 같은 오류를 출력합니다.
undefined reference to `greet`
다음은 함수 정의를 추가하여 수정한 예시입니다.
#include <stdio.h>
void greet() {
printf("Hello!\n");
}
int main() {
greet();
return 0;
}
정상적으로 컴파일되며, 출력 결과는 다음과 같습니다.
Hello!
● 실전 팁
- 선언한 함수는 반드시 구현까지 포함되었는지 확인하세요.
- 함수가 다른 파일에 정의되어 있다면 컴파일 대상에 포함되었는지 확인하세요.
- 정적(static) 함수는 선언된 파일 내에서만 접근 가능합니다. 외부에서 호출하려면 static을 제거해야 합니다.
링커 오류는 함수나 변수의 '정의'가 빠졌을 때 발생하는 것이므로, 선언과 정의의 차이를 정확히 이해하는 것이 중요합니다.
728x90