인프런 커뮤니티 질문&답변

Jihoon님의 프로필 이미지
Jihoon

작성한 질문수

홍정모의 따라하며 배우는 C++

4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결

[4.2강] linker 에러 발생 관련 문의 드립니다.

작성

·

54

·

수정됨

1

안녕하세요.

4.2강에서 러닝타임 31분 즈음에 나오는 코드를 저의 맥에 설치된 VS CODE에서 실행했을 때 에러가 발생하여 질문 드립니다. 코드는 아래와 같이 작성하였고, 강의에서 실행한 코드와 동일하다고 보여집니다. cpp 파일을 include 하는 것은 실행이 잘 되었으나, extern과 함께 전방 선언을 써서 다른 cpp 파일에 있는 함수를 가져오는 부분이 실행이 안되고 있습니다. 아래 제가 작성한 코드를 살펴봐주시면 감사하겠습니다.

 

main.cpp

image.png

 

 

main_sub.cpp

image.png

 

에러메시지

image.png

 

답변 4

1

안녕하세요? 질문&답변 도우미 Soobak 입니다.

 

추가 작성해주신 글의 말씀처럼 터미널에서 직접 명령어를 입력하여도 되지만,
그 과정을 VSCode 설정을 통해서 자동으로 진행될 수 있도록 할 수 있습니다.

VSCode설정과 관련된 내용은 교수님의 무료 강의 코테용 C++ 핵심 정리의 환경 설정 강의(링크)15:50 부분 이후의 내용을 참고하여 따라해보시면 도움이 되실 것 같습니다.

추가적으로, 해당 강의의 설정파일(.vscode 접두사 디렉토리들 중 환경에 맞는 디렉토리의 설정 파일을 참고해보시면 됩니다.)을 살펴보실 수 있는 강의 깃허브 링크를 첨부드립니다.
https://github.com/HongLabInc/HongLabCppSummary(링크)

0

올려주신 코드를 보면 main에서 전방선언한 함수와 sub.cpp에서 정의한 함수의 반환값이 다른데 컴파일 에러는 발생하지 않으셨나요?

0

Jihoon님의 프로필 이미지
Jihoon
질문자

이 문제와 관련해 찾아본 결과, 일부 MAC에서 돌아가는 VSCODE가 파일들을 자동으로 연결시켜주지 않아서 생기는 문제임을 알게 됐습니다.

아래와 같이 터미널에서 직접

g++ main.cpp main_sub.cpp -o main
./main

명령어를 실행했을 때 해당 프로그램이 잘 동작함을 확인했습니다.

 

그렇다면, 제 질문은 MAC의 VSCODE에서 이 파일들을 링킹할 수 있게 하려면 어떤 설정을 해야되는지 여쭙고 싶습니다.

안녕하세요? 말씀하신 내용 확인 후 본 질문의 답글에 답변을 작성드렸습니다.

0

안녕하세요, 인프런 AI 인턴입니다. Jihoon님.

링커 오류는 주로 프로젝트에 포함된 소스 파일 간에 연결 관계가 올바르게 지정되지 않았을 때 발생합니다. 작성해 주신 코드와 실행 명령을 보니, 여러 소스 파일을 함께 컴파일하는 과정에서 문제가 발생하고 있는 것 같습니다. 링커는 main.cpp에서 호출한 doSomething 함수를 찾지 못하고 있습니다.

여러 관련 질문들이 도움을 줄 수 있을 것 같습니다.

  1. main.cpp without differnt.cpp

    • 이 질문에서는 main.cpp에서 다른 소스 파일(different.cpp)에 정의된 함수를 호출하는 방법과 링커가 어떻게 이를 처리하는지를 다루고 있습니다.
  2. g++ visual code에서

    • 여기에서는 VS Code에서 C++ 파일을 컴파일할 때 발생하는 링크 오류와 그 해결 방법을 설명하고 있습니다.
  3. 외부 cpp에 있는 네임스페이스는 어떻게 직접적으로 링킹이 가능한가요?

    • 외부 소스 파일에 정의된 네임스페이스 및 함수를 extern 키워드와 전방 선언을 사용하여 컴파일하는 방법을 설명합니다.
  4. Inner class를 이용하여 정적 멤버 변수를 초기화하는 과정에 대한 질문입니다.

    • 이 질문에서는 정적 멤버 변수 초기화 및 링커 오류와 관련된 구체적인 설명을 제공합니다.

해결 방법 요약:
같은 디렉토리에 있는 여러 개의 소스 파일을 컴파일 할 때, 모든 소스 파일을 컴파일 명령에 포함시켜야 합니다. 아래와 같이 g++ 명령어를 수정해 보세요:

g++ main.cpp main_sub.cpp -o main

이렇게 하면 main.cppmain_sub.cpp를 동시에 컴파일하여 main이라는 실행 파일을 생성하게 됩니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Jihoon님의 프로필 이미지
Jihoon

작성한 질문수

질문하기