8

関数 f1 を持つアプリケーションがあります void f1 ()

さらに、を使用してロードするライブラリがありますLD_PRELOAD

ライブラリにはいくつかのコード ファイルといくつかのヘッダー ファイルがあり、.so ファイルにコンパイルされます。

ヘッダー ファイルの 1f1つでも、上記と同じ署名で名前が付けられた関数が使用されます。最新のf1ものはライブラリでのみ使用されます。(静的メソッドには変更できません)

問題は、アプリケーションのライブラリ オーバーライドから(を使用してLD_PRELOAD)ライブラリをロードするときです。f1f1

f1ライブラリにのみ表示されるようにライブラリを構成する方法はありますか?

4

2 に答える 2

5

ヘッダー ファイルを変更できる場合は、関数staticを作成してそのコンパイル ユニットでのみ表示されるようにするか、__attribute__ ((visibility ("hidden")))(GCC のみ) でマークしてそのライブラリでのみ表示されるようにします。

__attribute__ ((visibility ("hidden"))) void f1();
于 2013-03-10T12:28:55.837 に答える
3

ライブラリを-fvisibility=hiddenでコンパイルし、明示的__attribute__ ((visibility ("default")))に表示する必要があるライブラリのいくつかの関数を使用することもできます。

于 2013-03-10T12:34:29.120 に答える