5

私は以下のようなものを達成したい:

ライブラリの複数のバージョンがあります。dlopen() を使用してライブラリの最新バージョンを動的に読み込みます。次に、特定の関数 (同様の戻り値の型と引数リストと共に) がそのバージョンに存在するかどうかを確認したいと思います。開いている場合は、以前のバージョンにフォールバックして同じことを確認します。

「バージョン スクリプト」に関する投稿を見たことがありますが、使用できません。また、関数名のみをチェックするため、シンボルテーブルを検索しても解決策にはならないと思います。

4

1 に答える 1

8

シンボルのバージョン管理の良い説明はこちらです。名前とバージョンでシンボルを検索するには、GNU 拡張のdlvsym()関数が必要です。

#define _GNU_SOURCE
#include <dlfcn.h>
void *dlvsym(void *handle, char *symbol, char *version);

関数 dlvsym() は dlsym() と同じことを行いますが、追加の引数としてバージョン文字列を取ります。 注: C++ シンボル名は、引数リストを含むマングル形式で dlvsym() に渡す必要があります。残念ながら、GCC マングル名 (MSVC とは異なり) には戻り値の型が含まれていません。

詳細については、「dlopen(3) - Linux man page」を参照してください。

于 2011-02-17T23:11:19.480 に答える