Next: , Previous: User defined module data, Up: Using libltdl   [Contents][Index]


10.5 ¿·¤·¤¤¥â¥¸¥å¡¼¥ë¥í¡¼¥À¤ÎºîÀ®ÊýË¡¤ÈÅÐÏ¿ÊýË¡

¥â¥¸¥å¡¼¥ë¤Ë¥¢¥¯¥»¥¹¤¹¤ë¤¿¤á¤Îlibltdl¤ÎÊýË¡¤Ï¿¤¤¤±¤ì¤É¡¤¥×¥í¥¸¥§¥¯¥È ¤ÎÌÜŪ¤Ë½½Ê¬¤Ç¤Ê¤¤¤È¤­¤â¤¢¤ê¤Þ¤¹¡¥ÆÈ¼«¤Î¥í¡¼¥À¤ò½ñ¤­¡¤lt_dlopen ¤¬ÍøÍѤǤ­¤ë¤è¤¦¤Ë¡¤libltdl¤Ç¤½¤ì¤òÅÐÏ¿¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡¥

¥í¡¼¥À¤ò½ñ¤¯¤³¤È¤Ï¡¤lt_dlopen¡¤lt_dlsym¤½¤·¤Æ lt_dlclose¤Ç¸Æ¤Ó½Ð¤·²Äǽ¤Ê¡¤¾¯¤Ê¤¯¤È¤â»°¤Ä¤Î´Ø¿ô¤ò½ñ¤¯¤³¤È¤òɬ ÍפȤ·¤Þ¤¹¡¥¥ª¥×¥·¥ç¥ó¤Ç¡¤lt_dlexit¤¬¼Â¹Ô¤µ¤ì¤ë¤È¤­¥¯¥ê¡¼¥ó¥¢¥Ã ¥×½èÍý¤ò¼Â¹Ô¤¹¤ë½ªÎ»´Ø¿ô¤È¡¤lt_dlsym¤ËÅϤµ¤ì¤ë¤¢¤é¤æ¤ë¥·¥ó¥Ü¥ë ¤ËÁ°ÃÖ¤µ¤ì¤ë¥·¥ó¥Ü¥ë¤ÎÁ°ÃÖʸ»ú¤òÄ󶡤¹¤ë¤³¤È¤â²Äǽ¤Ç¤¹¡¥¤³¤ì¤é¤Î´Ø¿ô¤Ï¡¤ °Ê²¼¤Î´Ø¿ô¤Î¥Ý¥¤¥ó¥¿·¿¤Ë°ìÃפ¹¤ëɬÍפ¬¤¢¤ê¡¤¤½¤Î¸å¡¤¤½¤ì¤é¤ò lt_user_dlloader¤ÎÂå¤ï¤ê¤Ë´ØÏ¢ÉÕ¤±¤·¡¤ÅÐÏ¿¤¹¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡¥

¥í¡¼¥À¤ÎÅÐÏ¿¤Ë¤Ï¡¤lt_dlloader_find¤¬Ç§¼±¤Ç¤­¡¤ lt_dlloader_remove¤Çºï½ü¤Ç¤­¤ë¤è¤¦¤Ë¡¤¤½¤ì¤ËÂФ¹¤ë̾Á°¤òÁªÂò¤¹ ¤ë¤³¤È¤¬É¬ÍפǤ¹¡¥ÁªÂò¤·¤¿Ì¾Á°¤Ï¥æ¥Ë¡¼¥¯¤Ç¤¢¤ëɬÍפ¬¤¢¤ê¡¤libltdl¤ÎÁÈ ¤ß¹þ¤ß¥í¡¼¥À¤Ç´û¤Ë»ÈÍѤ·¤Æ¤¤¤ë¤â¤Î¤Ï¤¤¤±¤Þ¤»¤ó¡¥

"dlopen"

¸ºß¤¹¤ë¾ì¹ç¤Ï¡¤¥·¥¹¥Æ¥à¤Î¥À¥¤¥Ê¥ß¥Ã¥¯¥í¡¼¥À¡¥

"dld"

libltdl¤¬¥Ó¥ë¥É¤µ¤ì¤¿¤È¤­¤Ëlibdld¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¤ GNU dld¥í¡¼¥À¡¥

"dlpreload"

¥×¥ê¥í¡¼¥É¤µ¤ì¤Æ¤¤¤ë¥¹¥¿¥Æ¥£¥Ã¥¯¥â¥¸¥å¡¼¥ë¤Îlt_dlopen¤Î¤¿¤á¤Î¥í¡¼ ¥À¡¥

Á°ÃÖ¤µ¤ì¤ë"dl"¤Ï¡¤libltdl¤Î¾­Íè¤Î¥Ð¡¼¥¸¥ç¥ó¤ÇÄ󶡤µ¤ì¤ë¥í¡¼¥À¤È¤·¤ÆÍ½ Ìó¤µ¤ì¤Æ¤¤¤ë¤Î¤Ç¡¤ÆÈ¼«¤Î¥í¡¼¥À̾¤Ë»ÈÍѤ¹¤Ù¤­¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡¥

°Ê²¼¤Î·¿¤Ï¡¤ltdl.h¤ÇÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥

Type: lt_module

lt_module¤Ï¥â¥¸¥å¡¼¥ë°Í¸¤Îdlloader¤Ç¤¹¡¥¥À¥¤¥Ê¥ß¥Ã¥¯¥â¥¸¥å¡¼¥ë ¥í¡¼¥À¤Î³ÈÄ¥¤Ï¡¤¤³¤ì¤é¤ÎÄã¥ì¥Ù¥ë¤Î·¿¤ò»ÈÍѤ·¤ÆÄÌ¿®¤ò¹Ô¤Ê¤¤¤Þ¤¹¡¥

Type: lt_dlloader

lt_dlloader¤Ï¥â¥¸¥å¡¼¥ë¥í¡¼¥À¤Î·¿¤ËÂФ¹¤ë¥Ï¥ó¥É¥ë¤Ç¤¹¡¥

Type: lt_user_data

lt_user_data¤Ï¥í¡¼¥À¤Î¥¤¥ó¥¹¥¿¥ó¥¹¥Ç¡¼¥¿¤ËÂФ·¤Æ»ÈÍѤµ¤ì¤Þ¤¹¡¥

Type: struct lt_user_dlloader {const char *sym_prefix; lt_module_open *module_open; lt_module_close *module_close; lt_find_sym *find_sym; lt_dlloader_exit *dlloader_exit; }

¥À¥¤¥Ê¥ß¥Ã¥¯¥â¥¸¥å¡¼¥ë¤ò³«¤¯¤¿¤á¤Ë¿·¤·¤¤ÊýË¡¤òÄêµÁ¤·¤¿¤¯¤Æ¡¤¤½¤ì¤ò»ÈÍÑ ¤·¤¿lt_dlopen API¤¬¤¢¤ë¾ì¹ç¡¤¤³¤ì¤é¤Î¹½Â¤ÂΤΥ¤¥ó¥¹¥¿¥ó¥¹ ¤òºîÀ®¤·¡¤¤½¤ì¤òlt_dlloader_add¤ËÅϤ¹É¬Íפ¬¤¢¤ê¤Þ¤¹¡¥¹¥¤ß¤Î dlloader_data¥Õ¥£¡¼¥ë¥É¤ÇÅϤ¹¤³¤È¤¬²Äǽ¤Ç¡¤¤½¤ì¤Ï¡¤´Ø¿ô¥Ý¥¤¥ó¥¿ ¥Õ¥£¡¼¥ë¥É¤Ç»ØÄꤵ¤ì¤Æ¤¤¤ë¡¤¤½¤ì¤¾¤ì¤Î´Ø¿ô¤Ø¤ÎºÇ½é¤Î¥Ñ¥é¥á¡¼¥¿¤ÎÃͤȤ· ¤ÆÊÖ¤µ¤ì¤Þ¤¹¡¥

Type: lt_module lt_module_open (const char *filename)

lt_dlloader¥â¥¸¥å¡¼¥ë¥í¡¼¥À¤ËÂФ¹¤ë¥í¡¼¥À´Ø¿ô¤Î·¿¤Ç¤¹¡¥ struct lt_user_dlloader¹½Â¤ÂΤÎdlloader_data¥Õ¥£¡¼¥ë¥É¤ËÀßÄꤵ ¤ì¤ëÃͤϡ¤loader_data¥Ñ¥é¥á¡¼¥¿¤Ç¡¤¤³¤Î´Ø¿ô¤ËÅϤµ¤ì¤Þ¤¹¡¥¤½¤Î¤è ¤¦¤Ê´Ø¿ô¤Î¼ÂÁõ¤Ï¡¤»ØÌ¾¤µ¤ì¤¿¥â¥¸¥å¡¼¥ë¤Î¥í¡¼¥É¤ò»î¤ß¡¤´ØÏ¢¤¹¤ë lt_module_close¤Èlt_sym_find´Ø¿ô¤Î¥Ý¥¤¥ó¥¿¤ËÅϤ¹¤Î¤ËŬÀÚ ¤Êlt_module¤òÊÖ¤¹¤Ù¤­¤Ç¤¹¡¥´Ø¿ô¤¬¼ºÇÔ¤·¤¿¾ì¹ç¤ÏNULL¤òÊÖ ¤·¡¤lt_dlseterror¤òÍѤ¤¤Æ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òÀßÄꤹ¤Ù¤­¤Ç¤¹¡¥

Type: int lt_module_close (lt_user_data loader_data, lt_module module)

¥æ¡¼¥¶¤¬ÄêµÁ¤·¤¿¥â¥¸¥å¡¼¥ë¥í¡¼¥À¤ËÂФ¹¤ë¥¢¥ó¥í¡¼¥À¤Î·¿¤Ç¤¹¡¥¤½¤Î¤è¤¦¤Ê ´Ø¿ô¤Î¼ÂÁõ¤Ï¡¤module¥â¥¸¥å¡¼¥ë¤Ë·ë¤ÓÉÕ¤±¤é¤ì¤¿¤¢¤é¤æ¤ë¥ê¥½¡¼¥¹¤Î ²òÊü¤ò»î¤ß¡¤¤½¤Î¸å¤Ç¥á¥â¥ê¤«¤é¥¢¥ó¥í¡¼¥É¤¹¤Ù¤­¤Ç¤¹¡¥Íýͳ¤¬¤¢¤Ã¤Æ´Ø¿ô¤¬ ¼ºÇÔ¤·¤¿¾ì¹ç¡¤lt_dlseterror¤òÍѤ¤¤Æ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òÀßÄꤷ¡¤¥¼ ¥í°Ê³°¤òÊÖ¤¹¤Ù¤­¤Ç¤¹¡¥

Type: lt_ptr lt_find_sym (lt_module module, const char *symbol)

¥æ¡¼¥¶¤¬ÄêµÁ¤·¤¿¥â¥¸¥å¡¼¥ë¥í¡¼¥À¤ËÂФ¹¤ë¡¤¥·¥ó¥Ü¥ë¥ë¥Ã¥¯¥¢¥Ã¥×´Ø¿ô¤Î·¿ ¤Ç¤¹¡¥¤½¤Î¤è¤¦¤Ê´Ø¿ô¤Î¼ÂÁõ¤Ï¡¤¥â¥¸¥å¡¼¥ëmoduleÆâ¤Î»ØÌ¾¤µ¤ì¤¿ symbol¤Î¥¢¥É¥ì¥¹¤òÊÖ¤¹¡¤¤â¤·¤¯¤Ï¡¤¸¡ºº¤¬¼ºÇÔ¤·¤¿¾ì¹ç¤Ï¡¤¥¨¥é¡¼¥á¥Ã ¥»¡¼¥¸¤òlt_dlseterror¤ÇÀßÄꤷ¡¤NULL¤òÊÖ¤¹¤Ù¤­¤Ç¤¹¡¥

Type: int lt_dlloader_exit (lt_user_data loader_data)

¥æ¡¼¥¶¤¬ÄêµÁ¤·¤¿¥â¥¸¥å¡¼¥ë¥í¡¼¥À¤ËÂФ¹¤ë¡¤½ªÎ»´Ø¿ô¤Î·¿¤Ç¤¹¡¥¤½¤Î¤è¤¦¤Ê ´Ø¿ô¤Î¼ÂÁõ¤Ï¡¤¥í¡¼¥À¤Ë´ØÏ¢¤¹¤ë¤¢¤é¤æ¤ë¥ê¥½¡¼¥¹¤ò²òÊü¤¹¤Ù¤­¤Ç¡¤¤½¤ì¤Ë¤Ï lt_user_dlloader¤Îdlloader_data¥Õ¥£¡¼¥ë¥ÉÆâÉô¤Ë¤¢¤ë¥æ¡¼ ¥¶¤¬»ØÄꤷ¤¿¤¢¤é¤æ¤ë¥Ç¡¼¥¿¤ò´Þ¤ß¤Þ¤¹¡¥NULL¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¤´Ø¿ô¤Ï lt_dlexit¤Èlt_dlloader_remove¤«¤é¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡¥

Î㤨¤Ð¡¤°Ê²¼¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡¥

int
register_myloader (void)
{
  lt_user_dlloader dlloader;

  /* User modules are responsible for their own initialisation. */
  if (myloader_init () != 0)
    return MYLOADER_INIT_ERROR;

  dlloader.sym_prefix    = NULL;
  dlloader.module_open   = myloader_open;
  dlloader.module_close  = myloader_close;
  dlloader.find_sym      = myloader_find_sym.
  dlloader.dlloader_exit = myloader_exit;
  dlloader.dlloader_data = (lt_user_data)myloader_function;

  /* Add my loader as the default module loader. */
  if (lt_dlloader_add (lt_dlloader_next (NULL), &dlloader, "myloader") != 0)
    return ERROR;

  return OK;
}

¥í¡¼¥À¤ËÂФ¹¤ëɬÍפʽé´ü²½¤¬¤¢¤ë¾ì¹ç¤Ï¡¤¥í¡¼¥À¤¬ÅÐÏ¿¤µ¤ì¤ëÁ°¤Ë¼êư¤Ç¼Â ¹Ô¤¹¤ëɬÍפ¬¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤ – libltdl¤Ï¥æ¡¼¥¶¥í¡¼¥À¤Î½é´ü ²½¤ò°·¤¤¤Þ¤»¤ó¡¥

½ªÎ»¤Ïlibltdl¤Ç°·¤ï¤ì¤Þ¤¹¤¬¡¤dlloader_exit¤Î¥³¡¼¥ë¥Ð¥Ã¥¯ ¤¬½é´ü²½¥Õ¥§¡¼¥º¤Î´Ö¤ËÍ׵ᤵ¤ì¤¿¡¤¤¢¤é¤æ¤ë¥ê¥½¡¼¥¹¤ò²òÊü¤¹¤ë¤³¤È¤ò³Î¤« ¤á¤ë¤³¤È¤Ï½ÅÍפǤ¹¡¥

libltdl¤Ï¡¤ÆÈ¼«¤Î¥â¥¸¥å¡¼¥ë¥í¡¼¥À¤ò½ñ¤¯¤¿¤á¤Ë¡¤°Ê²¼¤Î´Ø¿ô¤òÄ󶡤·¤Þ¤¹¡¥

Function: int lt_dlloader_add (lt_dlloader *place, lt_user_dlloader *dlloader, const char *loader_name)

¿·¤·¤¤¥â¥¸¥å¡¼¥ë¥í¡¼¥À¤òÁ´¤Æ¤Î¥í¡¼¥À¥ê¥¹¥È¤Ë²Ã¤¨¡¤¤½¤ì¤Ï¡¤(place ¤¬NULL¤Î¾ì¹ç¤Ï)ºÇ¸å¤Î¥í¡¼¥À¤È¤·¤Æ¡¤¤½¤ì°Ê³°¤Ç¤Ïplace¤È¤· ¤ÆÅϤµ¤ì¤¿¥í¡¼¥À¤ÎľÁ°¤Ë²Ã¤¨¤Þ¤¹¡¥loader_name¤Ï¡¤¿·¤·¤¯ÅÐÏ¿¤µ¤ì ¤¿¥í¡¼¥À¤¬ÅϤµ¤ì¤¿¾ì¹ç¡¤lt_dlloader_name¤òÊÖ¤·¤Þ¤¹¡¤¤³¤ì¤é¤Î loader_name¤Ï¡¤¥æ¥Ë¡¼¥¯¤Ç¤¢¤ëɬÍפ¬¤¢¤ê¡¤¤½¤¦¤Ç¤Ê¤¤¾ì¹ç¤Ï¡¤ lt_dlloader_remove¤Èlt_dlloader_find¤ÏưºîÉÔ²Äǽ¤Ç¤¹¡¥À® ¸ù¤ËÂФ·0¤òÊÖ¤·¤Þ¤¹¡¥

{
  /* Make myloader be the last one. */
  if (lt_dlloader_add (NULL, myloader) != 0)
    perror (lt_dlerror ());
}
Function: int lt_dlloader_remove (const char *loader_name)

¥æ¥Ë¡¼¥¯¤Ê̾Á°loader_name¤Ç¼±Ê̤µ¤ì¤Æ¤¤¤ë¥í¡¼¥À¤òºï½ü¤·¤Þ¤¹¡¥¤³ ¤ì¤¬À®¸ù²Äǽ¤È¤Ê¤ëÁ°¤Ë¡¤»ØÌ¾¤µ¤ì¤¿¥í¡¼¥À¤Ë¤è¤ê³«¤«¤ì¤Æ¤¤¤ëÁ´¤Æ¤Î¥â¥¸¥å¡¼ ¥ë¤ò¡¤ÊĤ¸¤Æ¤ª¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¡¥À®¸ù¤ËÂФ·0¤òÊÖ¤·¡¤¤½¤ì°Ê³°¤Ç¤Ï¡¤¥¨¥é¡¼ ¥á¥Ã¥»¡¼¥¸¤¬lt_dlerror¤«¤é¼èÆÀ²Äǽ¤Ç¤¹¡¥

{
  /* Remove myloader. */
  if (lt_dlloader_remove ("myloader") != 0)
    perror (lt_dlerror ());
}
Function: lt_dlloader * lt_dlloader_next (lt_dlloader *place)

¥í¡¼¥À¥â¥¸¥å¡¼¥ëÁ´ÂΤò·«¤êÊÖ¤·¡¤¤½¤ì¤Ï¡¤place¤¬NULL¤Î¾ì¹ç ¤ÏºÇ½é¤Î¥í¡¼¥À¤òÊÖ¤·¡¤½çÈ֤˼¡¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤Ç¹Ô¤¤¤Þ¤¹¡¥¥Ï¥ó¥É¥ë¤Ï¡¤ lt_dlloader_addÍѤǤ¹¡¥

{
  /* Make myloader be the first one. */
  if (lt_dlloader_add (lt_dlloader_next (NULL), myloader) != 0)
    return ERROR;
}
Function: lt_dlloader * lt_dlloader_find (const char *loader_name)

loader_name¼±Ê̻Ҥ˰ìÃפ¹¤ëºÇ½é¤Î¥í¡¼¥À¤òÊÖ¤·¡¤¼±Ê̻Ҥ¬¸«¤Ä¤«¤é ¤Ê¤¤¾ì¹ç¤ÏNULL¤òÊÖ¤·¤Þ¤¹¡¥

libltdl¼«¿È¤Ç»ÈÍѲÄǽ¤Ê¼±Ê̻Ҥϡ¤¥Û¥¹¥È¥¢¡¼¥­¥Æ¥¯¥Á¥ã¤¬¥µ¥Ý¡¼¥È¤·¤Æ¤¤ ¤ë¾ì¹ç¤Ïdlopen10¡¤dld¡¤¤½¤·¤Ædlpreload¤Ç¤¹¡¥

{
  /* Add a user loader as the next module loader to be tried if
     the standard dlopen loader were to fail when lt_dlopening. */
  if (lt_dlloader_add (lt_dlloader_find ("dlopen"), myloader) != 0)
    return ERROR;
}
Function: const char * lt_dlloader_name (lt_dlloader *place)

lt_dlloader_next¤ält_dlloader_find¤Ç¼èÆÀ¤µ¤ì¤ë¡¤ PLACE¤Î¼±ÊÌ̾¤òÊÖ¤·¤Þ¤¹¡¥¤³¤Î´Ø¿ô¤¬¼ºÇÔ¤¹¤ë¾ì¹ç¡¤NULL¤òÊÖ ¤·¡¤lt_dlerror¤Ç²ó¼ý¤¹¤ë¤¿¤á¤Î¥¨¥é¡¼¤òÀßÄꤷ¤Þ¤¹¡¥

Function: lt_user_data * lt_dlloader_data (lt_dlloader *place)

lt_dlloader_next¤ält_dlloader_find¤Ç¼èÆÀ¤µ¤ì¤ë¡¤ PLACE¤Î¥¢¥É¥ì¥¹¤òÊÖ¤·¤Þ¤¹¡¥¤³¤Î´Ø¿ô¤¬¼ºÇÔ¤¹¤ë¾ì¹ç¡¤NULL¤ò ÊÖ¤·¡¤lt_dlerror¤Ç²ó¼ý¤¹¤ë¤¿¤á¤Î¥¨¥é¡¼¤òÀßÄꤷ¤Þ¤¹¡¥

10.5.1 ¥æ¡¼¥¶¥â¥¸¥å¡¼¥ë¥í¡¼¥À¤Ç¤Î¥¨¥é¡¼½èÍý

Function: int lt_dladderror (const char *diagnostic)

¤³¤Î´Ø¿ô¤Ç¡¤ÆÈ¼«¤Î¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òlt_dlerror¤ËÁȤ߹þ¤à¤³¤È¤¬ ²Äǽ¤È¤Ê¤ê¤Þ¤¹¡¥lt_dlerror¤ÇÊÖ¤¹¤¿¤á¤ÎŬÀڤʿÇÃÇ¥á¥Ã¥»¡¼¥¸¤ËÅÏ ¤¹¤â¤Î¤È¡¤lt_dlseterror¤Ç»ÈÍѤµ¤ì¤ë¥¨¥é¡¼¼±Ê̻Ҥ¬ÊÖ¤µ¤ì¤Þ¤¹¡¥

¼±Ê̻Ҥγä¤êÅö¤Æ¤¬¼ºÇÔ¤·¤¿¾ì¹ç¡¤¤³¤Î´Ø¿ô¤Ï-1¤òÊÖ¤·¤Þ¤¹¡¥

int myerror = lt_dladderror ("Doh!");
if (myerror < 0)
  perror (lt_dlerror ());
Function: int lt_dlseterror (int errorcode)

ÆÈ¼«¤Î¥â¥¸¥å¡¼¥ë¥í¡¼¥À¤ò½ñ¤¯¤È¤­¡¤lt_dlerror¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤ò Ä̤¸¤ÆÅÁȤµ¤ì¤ë¤è¤¦¤Ë¥¨¥é¡¼¤òȯÀ¸¤µ¤»¤ë¤¿¤á¤Ë¡¤¤³¤Î´Ø¿ô¤ò»ÈÍѤ¹¤Ù¤­¤Ç ¤¹¡¥libltdl¤Ç»ÈÍѤµ¤ì¤ëɸ½à¥¨¥é¡¼¤ÎÁ´¤Æ¤Ï¡¤ltdl.h¤ÇÀë¸À¤µ¤ì¤Æ¤¤ ¤Æ¡¤¤½¤¦¤Ç¤Ê¤±¤ì¤Ð¡¤lt_dladderror¤òÍѤ¤¤ÆÆÈ¼«¤Ë½ñ¤­²Ã¤¨¤ë¤³¤È¤¬ ²Äǽ¤Ç¤¹¡¥

if (lt_dlseterror (LTDL_ERROR_NO_MEMORY) != 0)
  perror (lt_dlerror ());

Footnotes

(10)

¤³¤ì¤Ï¡¤¥â¥¸¥å¡¼¥ë¤ò¥í¡¼¥É¤·¤Æ¤¤¤ë API ¤Ë°Í¸¤·¤Þ¤¹ – Î㤨¤Ð¡¤shl_load¤ÈLoadLibrary¤Ç ¤¹


Next: , Previous: User defined module data, Up: Using libltdl   [Contents][Index]