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/bincc1plusダウン/usr/libexec/gcc

おすすめ記事