기술/기타

[c++] gcc 컴파일러로 여러 개의 c++ 파일 link해서 컴파일하기

하기싫지만어떡해해야지 2024. 9. 22. 18:24

이번에 c++ 과목 과제를 하면서

교수님이 알려주신대로 gcc 컴파일러를 통해

컴파일을 하는데 자꾸

 

ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

이 에러가 뜨는 것이었다

 

열심히 구글링을 해보니

main함수가 있는 c++ 파일에

다른 여러 c++ 파일들을 include 해줬는데

이게 뭐 자체적으로 link가 되지않아 생기는 에러인 듯 했다

 

해결법은 초특급 간단하다

 

당연하겠지만 헤더에

#include를 이용해서 가져올 다른 cpp파일을 입력해줘야한다

그리고 저 cpp파일들은 같은 폴더 안에 있어야한다

 

그런 다음

기존에 gcc 컴파일러로 컴파일하기 위해서는

gcc main.cpp -o main

 

단순하게 이렇게만 입력해줬지만

 

gcc main.cpp -o main -lstdc++

 

뒤에 -lstdc++를 붙여주면 끝이다

 

 

저 -lstdc++가 무엇인가하면

gcc 컴파일러에게 c++ 표준 라이브러리(libstdc++)를

링크하도록 지시하는 옵션이다

 

c++ 표준 라이브러리인 std를

링크시켜주는 옵션이라고하는데..

 

이유는 모르겠지만 단일 파일로 컴파일하면

std를 쓰든 말든 -lstdc++를 붙여주지않아도 되는데

여러 개의 cpp 파일을 사용하는 경우에는

-lstdc++를 붙여주지않으면 컴파일 에러가 떴다

 

g++로하면 입력해줄 필요 없다고는 하는데

난 g++로 해도 똑같은 에러가 뜨던데

 

그냥 잘 모르겠다 ㅎ

 

 

아무튼 위와같은 방법으로

컴파일은 잘 되었고

과제도 깔쌈하게 해결했다