본문 바로가기
프로그래밍언어/C언어[Error]

[C언어][Error] 004. undefined reference to `function_name` – 호출된 함수가 정의되지 않음

by about_IT 2025. 4. 22.
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