dlsym() — dlopen() オブジェクトからのシンボルのアドレスの入手

標準

標準/拡張機能 C/C++ 依存項目

Single UNIX Specification、バージョン 3

両方 z/OS® V1R6

形式

#define _UNIX03_SOURCE
#include <dlfcn.h>

void  *dlsym(void *__restrict__ handle, const char *__restrict__ name);

機能説明

dlopen() 呼び出しを使ってアクセス可能にされたダイナミック・リンク・ライ ブラリー (DLL) 内で定義されたシンボルのアドレスを入手します。 handle 引数は、dlopen() の呼び出しから戻された値であって (dlopen() が dlclose() 呼び出しによって解放されていない場合)、name はシンボルの名前 であって文字ストリングです。

dlopen() によってロードされた DLL は、指定されたシンボルが検索されます。 そのシンボルがその DLL で見つからない場合、その DLL の従属 DLL が検索され、 さらにその従属 DLL に従属する DLL が検索され、指定されたシンボルが見つかるか、 または全従属 DLL の検索が終わるまで、幅優先方式で検索が続けられます。 この検索順によって、異なる DLL 内の重複したシンボルがどのように見つかるかが 決まります。ただし、同じレベルの異なる従属 DLL が検索される順は不定です。

また、dlsym() による従属 DLL の検索は、ロードされていない従属 DLL をロード しないことに注意してください。 dlopen() の呼び出しの一部としてロードされた従属 DLL が検索されるだけです。 dlsym() の以降の呼び出しで従属 DLL の全セットが使用可能になっている必要が ある場合、RTLD_NOW ロード・フラグを呼び出して DLL をオープンしてくださ い。 RTLD_LAZY が指定されると、どの従属 DLL がロードされるかは不定です。

この唯一の例外は、dlopen(NULL,0) 呼び出しで入手されるグロ ーバル・シンボル・オブジェクトであって、この場合には、すべて の DLL (RTLD_LOCAL を指定してオープンされた DLL を除く) は、それらがロ ードされた順に検索されます。

戻り値

以下の場合、NULL が戻されます。
  • handle が、dlopen() でオープンされた有効な DLL を参照していな い。
  • または、指定されたシンボル (name) が、handle で関係付 けられたどの DLL 内でも見つからない。

使用上の注意

  1. 指定されるシンボルは、エクスポートされたデータ項目でもよいし、関 数でもかまいません。
  2. DLL はエンクレーブ・レベルのリソースです。マルチスレッド環境での DLL の使用について詳しくは、「z/OS XL C/C++ プログラミング・ガイド」を参照してください。
  3. C++ シンボル名は、マングル形式で dlsym() に渡さなければなりません。 dlsym() は、呼び出し元アプリケーションのために名前のマングリングを実行しませ ん。
  4. 詳細な診断情報は、dlerror()、_EDC_DLL_DIAG 環境変数、 および Language Environment® DLL 障害制御ブロック (CEEDLLF) チェーンを使って 入手できます。
  5. この関数は、SPC、MTF、および CSP 環境では 使用できません。

以下の例は、関数またはデータ・オブジェクトにアクセスするため の dlopen() および dlsym() の使い方を示しています。 単純にするために、エラー検査は省略されています。
void    *handle;
int     *iptr, (*fptr)(int);

/* open the needed object */
handle = dlopen("/usr/home/me/libfoo.so", RTLD_LOCAL | RTLD_LAZY);

/* find the address of function and data objects */
fptr = (int (*)(int))dlsym(handle, "my_function");
iptr = (int *)dlsym(handle, "my_object");

/* invoke function, passing value of integer as a parameter */
(*fptr)(*iptr);

関連情報