링커, 로더, 실행 파일
C 언어 프로그램을 링크했더니 「undefined reference to `foo'」(foo에 대한 미정의 참조)라는 오류가 나왔다. 가장 가능성이 높은 원인은?
- Afoo 안에 문법 오류가 있다
- Bfoo를 두 파일에서 정의하고 있다
- Cfoo를 호출하고 있지만, foo의 내용을 정의한 파일이나 라이브러리가 링크에 포함되어 있지 않다
정답과 해설 보기
정답: C. foo를 호출하고 있지만, foo의 내용을 정의한 파일이나 라이브러리가 링크에 포함되어 있지 않다
헤더 파일에서 함수를 선언해 두면 컴파일은 통과합니다. 하지만 링크할 때 foo를 정의한 오브젝트 파일이나 라이브러리를 찾지 못하면 호출 명령에 넣을 주소가 정해지지 않아 이 오류가 발생합니다. 정의한 파일을 링크하는 것을 잊었거나, 라이브러리 지정을 잊었거나(-lm 등), 이름의 철자나 인수의 차이로 다른 이름이 되어 버린 경우 등이 흔한 원인입니다.
- A. 문법 오류라면 컴파일 단계에서 멈춥니다.
- B. 둘이 있으면 다중 정의 오류가 됩니다.
- C. 올바릅니다. 선언은 있지만 정의를 찾지 못한 상태입니다.