Dockerfileにapt installを書いて再現可能なビルド環境を構築している最中に特定のファイルが見つからないといわれることがある。この際、どのパッケージを追加すればそのファイルがDockerイメージに追加できるのかがすぐにわからない。例えば/usr/x86_64-linux-gnu/include/stdc-predef.h
が存在しないというエラーが出力された際に、stdc
から標準Cライブラリ関連のパッケージなのだと推測はできるが具体的なパッケージを把握しないと先には進めない。なお、このファイルはbuild-essentials
には含まれない。
dpkg -Sで調べる
dpkgは標準で入っている。
# dpkg -S /usr/x86_64-linux-gnu/include/stdc-predef.h
libc6-dev-amd64-cross: /usr/x86_64-linux-gnu/include/stdc-predef.h
dlocateで調べる
dlocateというラッパープログラムを利用する。
# sudo apt install dlocate
# dlocate /usr/x86_64-linux-gnu/include/stdc-predef.h
libc6-dev-amd64-cross: /usr/x86_64-linux-gnu/include/stdc-predef.h
これでapt install libc6-dev-amd64-cross
で /usr/x86_64-linux-gnu/include/stdc-predef.h
が無いというエラーは出なくなるとわかる。