C++ header-only lib에 대한 궁금증

안녕하세요~

저도 저만의 라이브러리를 만드는게 꿈이라 열심히 공부하고 있는중에
header only로 배포하는 라이브러리들이 있더라고요.

그렇게 배포하게 되면 사용자 입장에서 컴파일할때마다 사용하는 라이브러리 헤더까지 빌드해야해서
사용자의 컴파일 시간이 길어지지 않을까요? 템플릿은 어쩔 수 없겠지만…

아니면 미리컴파일된 헤더를 사용해서 컴파일 시간을 줄이나요?

header only 라이브러리의 장점과 단점에 대해 궁금합니다. ㅎㅎㅎㅎㅎ

1 Like

고마워요 스오플!

안녕하세요.

저도 인터넷의 자료를 찾아봤는데, 사실 잘 이해가 가지 않더라고요.
어쩌피 라이브러리를 가져다 쓰는건 똑같은데 제가 컴파일할때마다 매번 라이브러리를 컴파일 해야하는거면 불편한거 아닌가 싶은…

많은 라이브러리들이 아키텍쳐별로 컴파일된 라이브러리를 제공하거나, 동시에 소스코드를 제공하여 컴파일 할 수 있게 하잖아여.

약간의 편리한 사용을 위해 부담을 지는거 같아서…

제가 방향을 잘못 보고 있나요??

수정과 배포의 용이함같은 편의성에 비하면 컴파일 시간 증가는 감수할만 하다고 본게 아닐까요?

  1. 템플릿 메타프로그래밍 써야 해서

  2. 인라이닝을 위해

1 Like

안녕하세요

두가지 경우라면 당연히 라이브러리 사용자가 컴파일 해야하는 부분이니
그렇군요 ㅎㅎㅎ

컴파일 시간증가가 생각보다 크지 않은가 보군요 ㅎㅎㅎ

아뇨 엄청 느려집니다만 런타임 느려지는 것보다는 컴파일 오래걸리는게 낫죠.

그러면 정적라이브러리 컴파일 해서 배포하는게…

header only library 를 가져다 쓴다고 해서
pre compile 하지 말란 법도 없고 정적 빌드 하지 말란 법도 없죠.
컴파일 시간 최적화는 header only 건 아니건 별개로 다뤄야 될 주제예요.

어떤 모듈은 보안성을 위해서 일부만 노출시켜야 될 경우도 있고,
어떤 모듈은 인라인화를 위해 전부다 헤더에 노출시켜도 컴파일이 엄청 빠를 수 있어요.
( 컴파일러도 캐시를 안쓰는게 아니니까요 )

어찌되었거나, 얼음나무님이 짚어주신대로
인라인화 가능성이라는건 C++ 에서 엄청 중요한 이슈예요. ( 여기서 template의 장점을 논할 필요는 없겠고 )
선택의 문제가 아닌 필수의 문제인 경우도 많다는거죠.
스크립트 언어를 선택하지 않고 C++ 을 선택했다면 기본적으로 성능에 대한 기대치가 높다는것 아니겠습니까?

2 Likes

저는 build 조건 까다로운 프로젝트를 보고 이게 goto 문 스파게티 코드로 볶아놓은거랑 무슨 차이지 싶은데,
cmake 가 있어서 행복해요 하는 사람들은 뭐 이견이 있겠죠.

그렇군요. 답변 감사합니다.

header only로 만들어보면서 공부를 더 해봐야겠습니다.

정말 공감가는 말씀이십니다. 패키지매니저가 없어서 그런지 다른 라이브러리를 사용하기 위해 삽질해야하는 때가 있더라고요… ㅠㅠ

패키지 매니저는 보통 vcpkg나 conan을 밀어주는 추세입니다.
거기에도 없으면 삽질해야 하지만요…

users can use precompiled header.

I got it :smiley: