ライブラリに複数のバージョンがある場合、システムはどのバージョンを使用するか

ライブラリに複数のバージョンがある場合、システムはどのバージョンを使用するか

/usr/lib64/libfreetype.so にバージョン 1.4 の freetype ライブラリが既にインストールされており、このライブラリの別のバージョンがコンパイルされて /usr/local/lib/libfreetype.so にインストールされているとします。freetype を必要とするソフトウェアをビルドするときに、ビルド システム (make) はどのバージョンを使用するかをどのように認識するのでしょうか。

答え1

TL;DR バージョン: それは状況によります。

  • OS:ライブラリの検索に使用するパスを登録するOS 固有の環境 ( LD_LIBRARY_PATH) 構成ファイルまたはコマンド ( など)が存在する場合があります。ldconfig(8)
  • ビルドシステム:環境変数LDFLAGSまたはコマンドラインフラグや構成ファイル設定など。システム (またはユーザー) がカスタムパスで ncurses を持っている場合は がmuttあります--with-curses=[dir]。これらはビルドシステム (または のフレーバーmake) に依存し、autoconf または cmake ファイルに手動で書き込む必要がある場合があります。
  • ビルド後の設定: (使用可能な場合) などのツールを使用すると、patchelf異なるライブラリを選択したり、検索パスを変更したりできます。

答え2

libxxx.so通常は、名前にバージョンが含まれる共有ライブラリ ファイルへのシンボリック リンクです。

を使用してリンクする場合は-lxxx、このlibxxx.soファイルが使用されます。

別のバージョンにリンクする場合は、ライブラリのフルパス名を指定する必要があります。

関連情報