clang++를 사용하여 C++ 애플리케이션을 빌드하기 위해 작은 알파인 기반 도커 컨테이너를 빌드하려고 합니다. Dockerfile
다음과 같습니다.
FROM alpine:3.10
RUN apk add --no-cache clang
하지만 hello world를 컴파일하려고 하면 다음 오류가 발생합니다.
$ printf '#include <iostream>\nint main(){std::cout<<"Hello"<<std::endl;}' > test.cxx
$ clang++ test.cxx -o test
test.cxx:1:10: fatal error: 'iostream' file not found
#include <iostream>
^~~~~~~~~~
1 error generated.
그러나 이 컨테이너에 패키지를 추가하면 g++
이 예제가 예상대로 컴파일되고 작동합니다.
이 패키지에는 g++
모든 C++ 헤더가 포함되어 있는 것 같습니다.
apk info --who-owns /usr/include/c++/9.2.0/iostream
/usr/include/c++/9.2.0/iostream is owned by g++-9.2.0-r3
g++를 설치하지 않고 C++ 헤더 파일을 설치하는 방법이 있나요? 내 도커 이미지를 작게 유지하고 g++를 유지하고 싶고 해당 종속성이 상당히 무겁습니다.
답변1
iostream
불행하게도 g++는 표준 C++ 헤더 파일을 제공하는 유일한 패키지입니다 . 콘텐츠별로 Alpine Linux 패키지 색인을 검색하여 이를 확인할 수 있습니다.
https://pkgs.alpinelinux.org/contents?file=iostream&path=&name=&branch=v3.10&arch=x86_64
그러나 이미지를 작게 유지하려면 g++
아래 설명과 같이 2단계 Docker 빌드를 사용하거나 빌드 후 이미지를 스쿼싱하여 패키지를 설치하고 최종 이미지에서 모든 g++ 실행 파일을 제거 할 수 있습니다.알파인의 경량 GCC.
/usr/include/c++
기본적으로 및 아래에 모든 항목을 넣어야 합니다 /usr/lib
. 당신은 삭제할 수 있습니다gcc 실행 가능 바이너리아래로 /usr/bin
, 그리고 cc1plus
아래로 /usr/libexec/gcc
.