
apt-get install が、Ubuntu (16.04) から呼び出された場合と、debian (stretch-slim docker イメージ) から呼び出された場合で、同じように動作しないのはなぜなのか、私にはわかりません。
基本的に、私は以下を実行します:
root@ubuntu $ apt-get install libfcgi-dev
...
root@ubuntu $ dpkg -L libfcgi-dev
/.
/usr
/usr/lib
/usr/lib/libfcgi++.a
/usr/lib/libfcgi.a
/usr/share
/usr/share/doc
/usr/share/doc/libfcgi-dev
/usr/share/doc/libfcgi-dev/copyright
/usr/include
/usr/include/fastcgi.h
/usr/include/fcgi_config.h
/usr/include/fcgios.h
/usr/include/fcgio.h
/usr/include/fcgiapp.h
/usr/include/fcgi_stdio.h
/usr/include/fcgimisc.h
/usr/lib/libfcgi.so
/usr/lib/libfcgi++.so
/usr/share/doc/libfcgi-dev/changelog.Debian.gz
コンテナからも同じです:
root@container $ apt-get install libfcgi-dev
...
root@container $ dpkg -L libfcgi-dev
/.
/usr
/usr/include
/usr/include/fastcgi.h
/usr/include/fcgi_config.h
/usr/include/fcgi_stdio.h
/usr/include/fcgiapp.h
/usr/include/fcgimisc.h
/usr/include/fcgio.h
/usr/include/fcgios.h
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libfcgi++.a
/usr/lib/x86_64-linux-gnu/libfcgi.a
/usr/share
/usr/share/doc
/usr/share/doc/libfcgi-dev
/usr/share/doc/libfcgi-dev/changelog.Debian.amd64.gz
/usr/share/doc/libfcgi-dev/changelog.Debian.gz
/usr/share/doc/libfcgi-dev/copyright
/usr/lib/x86_64-linux-gnu/libfcgi++.so
/usr/lib/x86_64-linux-gnu/libfcgi.so
パッケージはインストール先を決定するものだと思っていましたが([この投稿][1]によると)、apt-installはdebianでは「x86_64-linux-gnu」を追加するようです。
すべてのライブラリパスがハードコードされているDebianで大規模なビルドを実行する必要があるため、非常に面倒です。"/x86_64-linux-gnu"一部
これを回避して、すべての x86_64-linux-gnu/* を /usr/lib にハードリンクしたり、make ファイルを書き換えたりせずにビルドを実行する方法についてヒントを持っている人はいますか?
答え1
これはapt
パスを変更するものではありません。Ubuntu 16.04パッケージは「古い」パスを使用して構築され、Debian 9パッケージはマルチアーキテクチャパスを使用して構築されました(パッケージのバージョン8.4の変更ログ)。
パスをハードコードする必要はまったくありません。コンパイラはこれらのライブラリがどこにあるかを認識しています。