개발/C, C++

[Clang] C++ 빌드 시 undefined reference error 해결 방법

growing-dev 2023. 12. 2. 22:15

제가 WSL을 여러 번 설치하고 CMake로 빌드하면서 겪었던 상황과 문제에 대해서 공유해 보도록 하겠습니다.

 

 

WSL, CMake 빌드 시 undefined reference error 해결 방법

 

 

 

 

 1. 필수 standard lib 설치 및 지정 필요

 

아래와 같은 기본적인 명령어를 알지 못한다면 기본적으로 clang 설치 후 build-essential, libc++-10-dev 와 같은 라이브러리들을 설치하지 않아서 발생한 문제일 경우가 있습니다.

undefined reference to `operator new
undefined reference to `std::cout'

 

이 경우 clang version에 따라 아래와 같이 설치를 할 필요가 있습니다.

sudo apt install libstdc++-10-dev

 

 

 

 2. 만약 설치가 되어 있는데 적용이 되지 않는 다면

 

1번에서 해당 라이브러리들이 설치가 되어 있는데 적용이 되지 않는다고 한다면 링크가 잘 되지 않는 문제일 수가 있습니다. 따라서 옵션에 직접 추가를 해주는 방법이 있습니다.

CMake에서는 아래와 같이 flag를 추가해 주어서 지정해 줄 수 있습니다.

set(CMAKE_CXX_FLAGS "-stdlib=libc++")

 

 

 

 3. 만약 그래도 해결되지 않는 다면

 

제가 했던 기본적인 실수이기도 한데, CXX 컴파일러에 그냥 clang으로 입력한 경우입니다.

set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang)

 

위와 같이 설정하면 cpp를 빌드할 때 c언어용 라이브러리를 인식하려고 해서인지 제대로 인식이 되지 않는 것 같았습니다.

따라서 아래와 같이 정상적으로 수정하면 해결되는 것을 확인했습니다.

set(CMAKE_C_COMPILER clang)
set(CMAKE_CXX_COMPILER clang++)

 

 

 결론

 

가장 기본적인 실수를 한 뒤 이후 여러 가지를 시도하면서 시간낭비를 한 경험입니다. 여러분들을 부디 이런 실수를 하지 않기를 바라면서 글을 남겨봅니다.

반응형