Alpine Clang 아래에 C++ 헤더가 누락되었습니다.

Alpine Clang 아래에 C++ 헤더가 누락되었습니다.

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.

관련 정보