GCC에서 LLVM Clang ?

손정현·2021년 1월 28일

CLANG 과 GCC

GCC와 아예 다른 종류의 컴파일러이다. Clang은 LLVM이라는 컴파일러의 프론트 엔드 컴파일러이고 LLVM을 자세하게 설명해준 링크가 있어서 링크를 남긴다. LLVM은 두가지 과정을 거쳐서 기계어로 번역하는데, 프론트 엔드 컴파일러가 C언어를 중간 언어인 IR로 컴파일하고 백엔드 컴파일러가 IR을 기계어로 변역한다. 바로 이 프론트엔드 컴파일러가 Clang이다. 따라서 다른 언어를 변역해주는 프론트엔드 컴파일러도 존재한다.

Gcc도 사실 동일한 과정을 거쳐서 프론트엔드 컴파일러가 프로그래밍 언어를 중간 언어로 변역하고 백엔드 언어가 이를 기계어로 번역한다. 다만 이 과정에서 생성되는 중간언어와 최적화 방법, 프로그래밍 언어와의 호환성에서 차이가 발생한다.

따라서 아예 사용하는 라이브러리나 Clang을 사용하여 생성되는 중간언어와 GCC가 다르기 때문에 라이브러리를 공유하는 과정은 불가능하다.

C/C++/Objective C등과 같이 C언어와 관련된 언어는 LLVM Clang 을 사용하여서 컴파일이 가능하다. 따라서 C로 작성된 프로그램 자체는 전혀 바꿀 필요가 없다. 왜냐하면 프로그래밍 언어에서 기계어로 번역되는 과정만 다를 뿐 결국 수행되는 결과는 동일하다.

따라서 gcc 대신 LLVM Clang을 사용하는 방법은 좋은 시도일 수도 있다. 그렇다면 결국 속도 차이를 측정해서 얼만큼 속도 향상을 이끄는지 반드시 알 필요가 있다.

  • 해당 글은 Debain 8에서 gcc4.9 까지 지원해서 특정 라이브러리를 수행할 수 없게 되자, Debain 8이 Clang6을 지원하기에 프로젝트 컴파일 방법을 바꿔야하는 데에서 작성하게 되었습니다.

*참고 링크

https://zeddios.tistory.com/1175
https://www.reddit.com/r/cpp/comments/9or8s1/llvm_vs_gcc/

0개의 댓글