Provided by: manpages-ja-dev_0.5.0.0.20060115-1_all bug

GNU張
       glibc   では   POSIX   には戯椶気譴討い覆ご愎瑤    2つ追加されている。
       プロトタイプは以下の通りである。

       #define _GNU_SOURCE
       #include <dlfcn.h>

       int dladdr(void *addr, Dl_info *info);

       void *dlvsym(void *handle, char *symbol, char *version);

       関数                  dladdr()                 は、関数のポインタを引-
       数にとり、関数の名前と関数が定義されている
       ファイルの解決を試みる。情報は Dl_info 構造体に格納される。

       typedef struct {
         const char *dli_fname;/* File name of defining object */
         void *dli_fbase;      /* Load address of that object */
         const char *dli_sname;/* Name of nearest lower symbol */
         void *dli_saddr;      /* Exact value of nearest symbol */
       } Dl_info;

       dladdr() は、エラー時には 0 を返し、成功した場合は 0 以外を返す。

       関数                 dlvsym()                 は                dlsym()
       と同じ動作をするが、バージョンの文字列を渡す引た瑤
       追加されている点が異なる。

例
       math2.0る
              #include <stdio.h>
              #include <dlfcn.h>

              int main(int argc, char **argv) {
                  void *handle;
                  double (*cosine)(double);
                  char *error;

                  handle = dlopen ("libm.so", RTLD_LAZY);
                  if (!handle) {
                      fprintf (stderr, "%s\n", dlerror());
                      exit(1);
                  }

                  dlerror();    /* Clear any existing error */
                  *(void **) (&cosine) = dlsym(handle, "cos");
                  if ((error = dlerror()) != NULL)  {
                      fprintf (stderr, "%s\n", error);
                      exit(1);
                  }

                  printf ("%f\n", (*cosine)(2.0));
                  dlclose(handle);
                  return 0;
              }

       このプログラムを "foo.c" に書いたとすると、以下のコマンドでプログラムを
       ビルドでい襦

              gcc -rdynamic -o foo foo.c -ldl

       _init()      と      _fini()       をエクスポートするライブラリの場合は
       以下のようにしてコンパイルする必要がある。例として                bar.c
       をコンパイルする場合:

              gcc -shared -nostartfiles -o bar bar.c

意
       シンボル RTLD_DEFAULT  と  RTLD_NEXT  は  <dlfcn.h>  で定義されており、
       <dlfcn.h>   のインクルード前に  _GNU_SOURCE  が定義されている場合のみ-
       効となる。

史
       dlopen インターフェースの標準は  SunOS  をもとにしている。  SunOS  には
       dladdr() もあったが、 dlvsym() はなかった。

拠
       POSIX  1003.1-2003  には dlclose(), dlerror(), dlopen(), dlsym().  の-
       載がある。

目
       ld(1), ldd(1), dl_iterate_phdr(3), ld.so(8),  ldconfig(8),  ld.so  info
       pages, gcc info pages, ld info pages