古代のソフトウェア(1999年のUnreal Tournament "Classic"、UT99とも呼ばれます)を使用したいと思います。ダイナミックライブラリlibtxc_dxtn.so
が暗黙的に読み込まれ、オプションのS3テクスチャ圧縮(S3TC)がサポートされています。残念ながら、ライブラリをロードすると、メインアプリケーションがセグメンテーションフォルトでクラッシュします(クラッシュもhereと記載されています)。回避策は、libtxc_dxtn.so
を削除または移動してMesaのテクスチャ圧縮ライブラリを削除することです。アプリケーションはテクスチャ圧縮なしで完璧に正常に動作しますが、テクスチャ圧縮のサポートを必要とするその他のアプリケーションは現在壊れています。当然ながら、私は特定のアプリケーションに対して自分のシステムを変更したくありません。特定のダイナミックライブラリがロードされないようにする方法
私の質問は次のとおりです。
特定のアプリケーションによって特定のダイナミックライブラリがロードされないように(「マスク」または「無効にする」ように)できますか?私はLD_PRELOAD
の反対のようなものを見つけることを願っています。
更新:libtxc_dxtn.so
は暗黙的と間接的ロードされています。アプリケーションのバイナリを変更することは不可能です。
initialize program: ut-bin
file=libSDL-1.1.so.0 [0]; needed by ut-bin [0]
file=libGL.so.1 [0]; dynamically loaded by libSDL-1.1.so.0 [0]
file=i965_dri.so [0]; dynamically loaded by libGL.so.1 [0]
file=libtxc_dxtn.so [0]; dynamically loaded by i965_dri.so [0]
_indirectly loaded_とはどういう意味ですか? 'dlopen()'?可能であれば、おそらく、libtxc_dxtn.soを通さない 'dlopen()'オーバーライドを 'LD_PRELOAD'することができます。 – PSkocik
はい、 'dlopen()'が使用されています。 「間接的にロードされる」とは、「ライブラリはアプリケーション自体によって読み込まれるのではなく、アプリケーションによってロードされる共有ライブラリによって読み込まれる」という意味です。私の場合、 'application'→' libSDL-1.1.so.0'→ 'libGL.so.1'→' i965_dri.so'→ 'libtxc_dxtn.so'です。最初のライブラリのみが依存関係としてロードされ、他のライブラリは 'dlopen()'によってロードされます。 – Hermann
'dlopen'オーバーライドアプローチの' LD_PRELOAD'が有効です(依存ライブラリが 'RTLD_LOCAL'を使用していない限り、これは廃止された非標準フラグです。私は私の答えを更新しました。 – PSkocik