私のオープンソースプロジェクトArthaでは、パッシブデスクトップ通知をユーザーに表示するためにlibnotifyを使用しています。
libnotifyを静的にリンクする代わりに、実行時に共有オブジェクト(.so)ファイルのルックアップが行われdlload
、ターゲットマシンで使用可能な場合、ArthaはそのGUIで通知機能を公開します。アプリ上。dlload
start、 filename paramを使用した呼び出しlibnotify.so.1
が行われ、null以外のポインターが返された場合、機能が公開されます。
このモデルで繰り返し発生する問題は、ライブラリのバージョン番号がバンプされるたびに、Arthaのコードを更新する必要があることです。現在、このような事態が発生libnotify.so.4
するのは最新です。
Linuxシステムコール(アプリが実行されているディストリビューションに関係なく)はありますか?これは、特定のライブラリの共有オブジェクトが実行時に利用可能かどうかを教えてくれますか?1から10に変更してライブラリを列挙するブルートフォースオプションが存在することを私は知っています。私は解決策が醜くてエレガントではないと思います。
また、これがautoconfを介して対処できる場合、そのソリューションも歓迎されます。つまり、ビルド時に、ターゲットマシンに基づいて、生成されたconfigure.hはに渡すことができる正しい.so名を持っている必要がありますdlload
。
PS:優れたディストリビューションは、リンクを作成するスタイルに従って、libnotify.so.x
プログラマーが実行できるようにし、dlload("libnotify.so", RTLD_LAZY)
.soという番号の正しいバージョンがロードされると思います。残念ながら、Ubuntuを含め、すべてのディストリビューションがこれに準拠しているわけではありません。