あるサーバーでは最新のライブラリを使用し、古いサーバーではバイナリを使用してソースをコンパイルします。

あるサーバーでは最新のライブラリを使用し、古いサーバーではバイナリを使用してソースをコンパイルします。

ソースからソフトウェアをコンパイルするには最新のライブラリが必要libpcre3-devですが、私のサーバー上のオペレーティングシステム(Ubuntu)の現在のディストリビューションには以前のバージョンしかありませんが、libpcre3-dev利用可能なバックポートはありません。

libpcre3-dev最新バージョンで別のサーバーでバイナリをコンパイルし、実際のサーバーにバイナリを再インストールするつもりです。 2つの質問があります。

  1. これはうまくいきますか?私の主な関心事は、libpcre3私のサーバーにまだ古いバージョンがあり、バイナリが最新libpcre3バージョンにコンパイルされていても、実行時にまだ最新バージョンが必要であることですlibpcre3-dev

  2. 私のサーバーにバイナリを再インストールする最良の方法は何ですか?バイナリをコピーするか、.debパッケージに入れて(可能な場合)、パッケージマネージャを使用してインストールしますか?

答え1

プログラムがサーバーで利用できない新機能が必要な場合、その機能は実行時に使用できず、プログラムが実行されない可能性があります。

ライブラリを静的にリンクできます。欠点は、プログラムとは別にライブラリをアップグレードできないことです。このバージョンのライブラリでセキュリティの脆弱性が見つかった場合は、プログラムを再構築する必要があります。-lpcre3リンカコマンドラインから/usr/lib/libpcre3.a

ソフトウェアがインストールされているのと同じディレクトリにライブラリを動的にリンクしてコピーできます。ソフトウェアは、この追加のディレクトリを含むようにライブラリのロードパスを設定するラッパースクリプトを介して起動されます。

#!/bin/sh
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/opt/my-software/lib"
/opt/my-software/bin/foo "$@"

答え2

最初の質問は実際にリンクしたがって、静的にリンクするかどうかによって異なります。これを行い、両方のプラットフォームが同じアーキテクチャを持っている場合は、うまく機能します。

自己コンパイルされたバイナリをインストールする良い方法は、次の方法を使用することです。インストールの確認。お気に入りのパッケージマネージャを使用してインストールおよび削除できるDebianパッケージを作成します。

関連情報