いくつかのリモートホスト上で動作させることを意図したlibmysqlclient.soなどのダイナミックライブラリを必要とするCプログラムを開発しました。私は以下の配布オプションがあるようです:linuxの下でライブラリ依存関係のあるcプログラムを配布するためのオプション
- プログラムを静的にコンパイルします。
- リモートホストに必要な依存関係をインストールします。
- 依存関係をプログラムに配布します。
とにかく実行時にglibc-version
が必要になるため、最初のオプションが問題になります(今はglibcとlibnssを使用しているため)。
2番目のオプションについてはわかりません:インストールされたライブラリバージョンでは、(libxyz.so.VERSIONの横の)プログラムを実行するのに十分であるかどうかをチェックするメカニズムはありますか?私は起動時に何とかABI互換性をチェックできますか?
最後のオプションについて:すべての共有ライブラリをバイナリで配布するか、おそらくインストールされていないもの(libmysqlclient、libmなど)を配布しますか?
これとは別に、別のコンパイラをバイナリに使用し、依存関係がビルドされたもの(バイナリclang、ライブラリgccなど)を使用するとABI互換性の問題が発生する可能性がありますか?
正しい依存関係を指定するパッケージ( '.deb'、' .rpm')をビルドして、パッケージマネージャが自動的にそれらをインストールするようにします。 –