FreeType のFT_Load_Glyph
andFT_Render_Glyph
関数への引数を変更する共有オブジェクトを作成しましたが、現在はLD_PRELOAD
andで挿入していdlsym
ます。
これはうまくいきますが、これらの変更を行う方法があるかどうか知りたいです:
- 特定のホスト (Debian などを実行) で FreeType を使用するすべてのプログラム。
- FreeType に実際にリンクされていないプログラムを壊すことなく。
LD_PRELOAD
ホスト上のすべてのプログラムに単純に適用するのではなく、- FreeType の soname が変更されない限り、メンテナンスは必要ありません。と
- FreeType のファイルやホスト上のプログラムのファイルを変更する必要はありません。
私が思いついた唯一の「解決策」は、醜いハックです。
LD_PRELOAD
すべてのプログラムに対して、常に、遅くて壊れやすいように見えます。また- にコピー
libfreetype.so.6.12.3
しlibxxxxtype.so.6.12.3
ます。それから- soname を にパッチ
libxxxxtype.so.6.12.3
しlibxxxxtype.so.6
ます。 - 介在する共有オブジェクトを に対してリンクします
libxxxxtype.so.6
。と - たとえば、共有オブジェクトをインストールします
libfreetype.so.6.999
。
- soname を にパッチ
基本的に、共有オブジェクトのソースまたはそれを使用するプログラムに必ずしもアクセスすることなく、残りの関数を通過させながら、共有オブジェクト内のいくつかの関数に透過的にパッチを適用したいのですが、偽の共有オブジェクトを作成するとsoname では、それを実際の にリンクする (または)libfreetype.so.6
きれいな方法がわかりません。dlopen
libfreetype.so.6
これは共有ライブラリを使った最初の実際の実験なので、この質問が間違った仮定をしていたり、単に意味をなさない場合はご容赦ください。