/usr/lib/x86_64-linux-gnu/検索パスではありません。この問題を解決する「正しい」方法は何ですか?

/usr/lib/x86_64-linux-gnu/検索パスではありません。この問題を解決する「正しい」方法は何ですか?

/usr/lib/x86_64-linux-gnu/<libname>Ubuntuでは、デフォルトでは検出されていないにインストールされているライブラリに対して接続エラーが発生する傾向があります。最新の例では、Pythonバインディングを使用しようとしましたが、パッケージが共有オブジェクトの下にインストールされており、Python(gccに依存しているように見える)がパッケージを検索しないため、fswatch苦情が表示されます。undefined symbol: fsw_init_libraryfswatch/usr/lib/x86_64-linux-gnu/libfswatch

以下のように、そのディレクトリを検索パスに追加するようにフラグをハードコードすることができますが、これは非常に脆弱で移植性がなく、完全に間違っているようです。

if sys.platform == 'linux':
    os.setenv ('LD_LIBRARY_PATH', '/usr/lib/x86_64-linux-gnu/libfswatch')

他の目的で使用したり、LD_LIBRARY_PATHx86_64以外のプラットフォームをサポートしたり、この問題によって複数の依存関係がある場合など、これは非常に迅速に非常に複雑になります。さらに、注文はツールチェーンによって大きく異なります。上記のコードはPythonで動作します。 Makefile + gccには他のものが必要な場合があります。

このプラットフォーム、パッケージ、およびツール関連の問題を回避するより良い処理方法はありますか?パッケージがライブラリ検索パスに入れることに興味がないこのようなライブラリをスコープにインポートする「正しい」(予想)方法は何ですか?環境変数を正しい方法で設定する魔法のスクリプトはありますか?そのようなライブラリを「有効にする」設定がありませんか? pkg-configと同じで十分ですが、fswatchpkg-configファイルは提供されません.pc。ここではfswatchを例として使用していますが、この問題によって迷惑になったのは今回が初めてではありません(過去の事件の具体的な内容は覚えていませんが)。

答え1

これには2つの側面があります。

最初はランタイムライブラリの検証です。これがLD_LIBRARY_PATH構成です。この状況を処理する最もきれいな方法は、/etc/ld.so.conf.dライブラリを含むディレクトリを指すファイルを作成することです。

echo /usr/lib/x86_64-linux-gnu/libfswatch | sudo tee /etc/ld.so.conf.d/fswatch-x86_64-linux-gnu.conf
sudo ldconfig

2つ目はビルド時間の解決です。この問題に対する単一の「ベスト」ソリューションはありません。 1つのpkg-configファイルが得られる最高ですが、ビルドは明らかにそのファイルを参照する必要があることに注意してください。

関連情報