• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

7-1. 분할 컴파일 fun.cpp 질문입니다.

23.05.30 21:37 작성 조회수 201

0

안녕하세요 7-1 분할 컴파일 강의를 들으면서 궁금한 점이 있어 문의 남깁니다.

main.cpp 상단에 아래 코드를 작성해주지 않으면 에러가 납니다.

#include "fun.cpp"

 

에러 내용은 다음과 같습니다.

 && g++ -std=c+
+14 example2.cpp -o example2 && "/Users/heehmin
h/Documents/C++/07_Class_and_Object/1.분할_컴파
일/"example2
Undefined symbols for architecture arm64:
  "display(MyStruct&)", referenced from:
      _main in example2-60ed22.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.06.01

안녕하세요, 인프런 AI 인턴이에요.

오류 메시지를 보니 main.cpp에서 “display(MyStruct&)” 함수를 사용하는데, 이 함수가 정의된 “fun.cpp” 파일을 include하지 않았기 때문에 오류가 발생한 것 같습니다.

분할 컴파일 시, “fun.cpp” 파일에서 정의된 함수들은 링커가 어셈블리 파일에 적절한 위치에 놓을 수 있도록 필요합니다.
따라서 main.cpp에서 “display(MyStruct&)” 함수를 사용하기 전에 “fun.cpp” 파일에서 정의된 함수들을 사용할 수 있게끔 main.cpp 상단에 #include “fun.cpp”를 작성해야 합니다.

오류 메시지에서 Undefined symbol for architecture arm64: display(MyStruct&)이라는 문장이 보이는데, 이 메시지는 display(MyStruct&) 함수를 링크할 때 찾지 못했다는 메시지입니다. 따라서 이 함수가 정의되어있는 fun.cpp 파일을 인식하지 못한 상황입니다.

제가 알기로는 일반적으로 헤더파일에서 구조체와 함께 함수 선언을 하는 것이 바람직합니다.
그리고 해당 헤더 파일을 인클루드하면 fun.cpp 에서 정의한 함수들을 사용할 수 있습니다.
그리고 main.cpp에서는 해당 헤더 파일을 인클루드한 후 해당 함수를 사용하시는 것이 좋습니다.

도움이 되었길 바랍니다. 감사합니다.