Next: Module loaders for libltdl, Previous: Thread Saftey in libltdl, Up: Using libltdl [Contents][Index]
libltdl¤¬´ÉÍý¤·¤Æ¤¤¤ë¡¤¤½¤ì¤¾¤ì¤Î¥í¡¼¥É¤µ¤ì¤¿¥â¥¸¥å¡¼¥ë¤Ë´Ø¤¹¤ëÆâÉô¾ð Êó¤Ë¤Ï¡¤¥æ¡¼¥¶¤¬ÍøÍѲÄǽ¤Ê¤â¤Î¤â¤¢¤ê¡¤¤½¤ì¤Ï°Ê²¼¤Î¤è¤¦¤Ê¹½Â¤ÂΤηÁ¼°¤Ç ¤¹¡¥
lt_dlinfo
¤Ï¡¤¥â¥¸¥å¡¼¥ë¤Î¾ðÊó¤òÊݸ¤¹¤ë¤¿¤á¤Ë»ÈÍѤµ¤ì¤Þ¤¹¡¥
filename°À¤Ï¡¤NULL
¤Ç½ªÃ¼¤µ¤ì¤¿¡¤¼ÂºÝ¤Î¥â¥¸¥å¡¼¥ë¥Õ¥¡¥¤
¥ë̾¤Îʸ»úÎó¤Ç¤¹¡¥¥â¥¸¥å¡¼¥ë¤¬libtool¥â¥¸¥å¡¼¥ë¤Î¾ì¹ç¡¤name¤Ï¤½
¤Î¥â¥¸¥å¡¼¥ë̾(Î㤨¤Ð¡¤"dir/libfoo.la"
¤ËÂФ¹¤ë"libfoo"
)
¤Ç¡¤¤½¤ì°Ê³°¤Ç¤ÏNULL
¤ËÀßÄꤵ¤ì¤Þ¤¹¡¥ref_count°À¤Ï¡¤¸½ºß
¥í¡¼¥É¤µ¤ì¤Æ¤¤¤ëƱ¤¸¥â¥¸¥å¡¼¥ë¤Î²ó¿ô¤òµ½Ò¤¹¤ë»²¾È¥«¥¦¥ó¥¿¤Ç¤¹¡¥
°Ê²¼¤Î´Ø¿ô¤Ï¡¤Í¿¤¨¤é¤ì¤¿handle¤ËÂФ¹¤ë¤³¤Î¹½Â¤ÂΤÎlibltdl¤ÎÆâÉô ¤Î¥³¥Ô¡¼¤Ø¤Î¥Ý¥¤¥ó¥¿¤òÊÖ¤·¤Þ¤¹¡¥
¥â¥¸¥å¡¼¥ëhandle¤Ë´Ø¤¹¤ë¤¤¤¯¤Ä¤«¤Î¾ðÊó¤ò´Þ¤à¹½Â¤ÂΤΡ¤¥Ý¥¤¥ó¥¿¤ò
ÊÖ¤·¤Þ¤¹¡¥¹½Â¤ÂÎ¤ÎÆâÍÆ¤ÏÊÔ½¸¤·¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¡¥¼ºÇÔ»þ¤Ë¤ÏNULL
¤¬
ÊÖ¤ê¤Þ¤¹¡¥
¤µ¤é¤Ë¡¤¥í¡¼¥É¤·¤¿Á´¤Æ¤Î¥â¥¸¥å¡¼¥ë¤Î¥Ï¥ó¥É¥ë¥ê¥¹¥È¤òÊÝ»ý¤¹¤ë¼ê½õ¤±¤ò¤¹ ¤ë¤¿¤á¤Ë¡¤¤³¤ì¤é¤Î´Ø¿ô¤Ç¡¤¥í¡¼¥É¤µ¤ì¤Æ¤¤¤ë¥â¥¸¥å¡¼¥ë¤Îlibltdl¤Î¥ê¥¹¥È Á´ÂΤò·«¤êÊÖ¤¹¤³¤È¤¬²Äǽ¤È¤Ê¤ê¤Þ¤¹¡¥
¥í¡¼¥É¤µ¤ì¤Æ¤¤¤ë¤½¤ì¤¾¤ì¤Î¥â¥¸¥å¡¼¥ë¤ËÂФ·´Ø¿ôfunc¤ò¸Æ¤Ó½Ð¤·¤Þ¤¹¡¥
°ú¿ô¤Îhandle¤Ï¡¤¥í¡¼¥É¤µ¤ì¤Æ¤¤¤ë¥â¥¸¥å¡¼¥ë¤Î¥Ï¥ó¥É¥ë¤Î°ì¤Ä¤Ç¡¤
data¤Ï¡¤lt_dlforeach
¤ËÅϤ¹data°ú¿ô¤Ç¤¹¡¥func
¤¬¥Ï¥ó¥É¥ë¤Î°ì¤Ä¤ËÂФ·¡¤¥¼¥í¤Ç¤Ê¤¤ÃͤòÊÖ¤¹¤È¤¹¤°¤Ë¡¤
lt_dlforeach
¤Ïfunc¤Î¸Æ¤Ó½Ð¤·¤òÄä»ß¤·¡¤Ä¾¤Á¤Ë1¤òÊÖ¤·¤Þ¤¹¡¥
¤½¤ì°Ê³°¤Ï0¤¬ÊÖ¤ê¤Þ¤¹¡¥
place¤¬NULL
¤Î¾ì¹ç¤Ï¡¤¥ê¥¹¥ÈÆâ¤ÎºÇ½é¤Î¥Ï¥ó¥É¥ë¤òÊÖ¤·¡¤¤½¤·
¤Æ½çÈ֤˼¡¤â¤Î¤ò¸Æ¤Ó½Ð¤¹¤³¤È¤Ç¡¤¥í¡¼¥É¤µ¤ì¤Æ¤¤¤ë¥â¥¸¥å¡¼¥ëÁ´ÂΤò·«¤êÊÖ
¤·¤Þ¤¹¡¥place¤¬¡¤¥í¡¼¥É¤µ¤ì¤Æ¤¤¤ë¥â¥¸¥å¡¼¥ë¥ê¥¹¥ÈÆâ¤ÎºÇ¸å¤ÎÍ×ÁÇ
¤Î¾ì¹ç¡¤¤³¤Î´Ø¿ô¤ÏNULL
¤òÊÖ¤·¤Þ¤¹¡¥
¤â¤Á¤í¤ó¡¤¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤ÎÌÜŪ¤Î¤¿¤á¤Ë¡¤¤½¤ì¤¾¤ì¤Î¥Ï¥ó¥É¥ë¤Ë´ØÏ¢ÉÕ¤± ¤¹¤ëɬÍפ¬¤¢¤ë¥Ç¡¼¥¿¤¬¤¢¤ë¾ì¹ç¡¤libltdl¤Ç´ÉÍý¤µ¤ì¤ë¥ê¥¹¥È¤ÈÊ¿¹Ô¤·¤Æ¡¤ ¥í¡¼¥É¤µ¤ì¤¿¥â¥¸¥å¡¼¥ë¥Ï¥ó¥É¥ë¤ÎÆÈ¼«¤Î¥ê¥¹¥È¤Î´ÉÍý¤¬É¬Íפˤʤê¤Þ¤¹¡¥¤· ¤«¤·¡¤¸ÄÊ̤Υ⥸¥å¡¼¥ë¥Ï¥ó¥É¥ë¤òÍѤ¤¤¿¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¥Ç¡¼¥¿¤Ë¡¤¥í¡¼¥É ¤µ¤ì¤¿¤â¤Î¤È¤·¤Æ´ØÏ¢ÉÕ¤±¤µ¤»¤ë¤¿¤á¤Ë¡¤°Ê²¼¤ÎAPI¤Î¸Æ¤Ó½Ð¤·¤ò»ÈÍѤ¹ ¤ë¾ì¹ç¤Ë¤Ï¡¤¼ÂºÝ¤Ë¤Ï¤½¤¦¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡¥Á°¤â¤Ã¤ÆÊݸ¤·¤¿¥Ç¡¼¥¿¤ò ²ó¼ý¤¹¤ë¤¿¤á¤Ë¸å¤ÇÍøÍѤ¹¤ëlibltdl¤«¤é¤Î¥æ¥Ë¡¼¥¯¤Ê¸Æ¤Ó½Ð¤·id¤ò¡¤ºÇ½é¤Ë ¼èÆÀ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡¥¤³¤ì¤Ç¡¤¥í¡¼¥É¤µ¤ì¤Æ¤¤¤ë¥â¥¸¥å¡¼¥ë¤ËÂФ¹¤ëÆÈ¼« ¤Î¥Ç¡¼¥¿¤ò¸ÄÊ̤ËÊݸ¤·¤¿¤¤°Û¤Ê¤ë¥é¥¤¥Ö¥é¥ê¤¬¡¤¤â¤¦°ì¤Ä¤Î(¥é¥¤¥Ö¥é¥ê)¤Î ¥Ç¡¼¥¿¤Ø¤Î¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ê¤·¤Ç¤½¤ì¤ò¹Ô¤¦¤³¤È¤¬²Äǽ¤È¤Ê¤ê¤Þ¤¹¡¥
¸ÄÊ̤Υǡ¼¥¿¥»¥Ã¥È¤Î¥¡¼¤òÊݤġ¤Æ©²á¤Ç¤Ê¤¤·¿¤Ç¤¹¡¥
¥â¥¸¥å¡¼¥ë¥Ç¡¼¥¿¤´¤È¤Ë¸ÄÊ̤Υ»¥Ã¥È¤ò¡¤Êݸ¤·²ó¼ý¤¹¤ë¤¿¤á¤Î¥æ¥Ë¡¼¥¯¤Ê¥¡¼ ¤ò¼èÆÀ¤¹¤ë¤¿¤á¤Ë¡¤¤³¤ì¤ò»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡¥
¸å¤Ç²ó¼ý¤¹¤ë¤¿¤á¤Ë¡¤key¤Èhandle¤Ë¥æ¥Ë¡¼¥¯¤Ë´ØÏ¢ÉÕ¤±¤µ¤ì¤¿
¥Ç¡¼¥¿¤Î¥»¥Ã¥È¤È¤·¤Æ¡¤data¤òÀßÄꤷ¤Þ¤¹¡¥¤³¤Î´Ø¿ô¤Ï¡¤°ÊÁ°¤Ë´ØÏ¢ÉÕ
¤±¤µ¤ì¤¿key¤Èhandle¤¬¤¢¤ë¾ì¹ç¤Ï¡¤¤½¤Îdata¤òÊÖ¤·¤Þ¤¹¡¥
0¤Î·ë²Ì¤Ï¡¤Á°²ó¤Î¥¨¥é¡¼(¤¬Â¸ºß¤¹¤ë¾ì¹ç)¤ËÂФ¹¤ë¿ÇÃÇ·ë²Ì¤¬¡¤
lt_dlerror()
¤ÇÍøÍѲÄǽ¤Ç¤¢¤ë¤³¤È¤ò¼¨¤·¤Æ¤¤¤ë²ÄǽÀ¤¬¤¢¤ê¤Þ¤¹¡¥
Î㤨¤Ð¡¤¤¤¤¯¤Ä¤«¤Î´ØÏ¢¥Ç¡¼¥¿¤òÀµ¤·¤¯ºï½ü¤¹¤ë¤¿¤á¤Ë¡¤°Ê²¼¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡¥
lt_ptr stale = lt_dlcaller_set_data (key, handle, 0); if (stale == NULL) { char *error_msg = lt_dlerror (); if (error_msg != NULL) { my_error_handler (error_msg); return STATUS_FAILED; } } else { free (stale); }
key¤Èhandle¤Ë´ØÏ¢ÉÕ¤±¤µ¤ì¤Æ¤¤¤ëdata¤Î¥¢¥É¥ì¥¹¡¤¤Þ¤¿
¤Ï¡¤Ìµ¤¤¾ì¹ç¤ÏNULL
¤òÊÖ¤·¤Þ¤¹¡¥
¤³¤³¤Þ¤Ç¤Î´Ø¿ô¤Ï¡¤¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ë¥í¡¼¥É¤µ¤ì¤¿¤ê¥¢¥ó¥í¡¼¥É¤µ¤ì¤¿¤ê¤·
¤¿¥â¥¸¥å¡¼¥ë¤òÄÉÀפµ¤»¤ëɬÍפʤ¯¡¤¥ª¥Ú¥ì¡¼¥·¥ç¥ó¤Î¸¡º÷¤ÈŬÍѤò¼ÂÁõ¤¹¤ë
¤¿¤á¤Ë¡¤lt_dlforeach
¤ÈÁȤ߹ç¤ï¤»¤ë¤³¤È¤¬²Äǽ¤Ç¤¹¡¥
int my_dlcaller_callback (lt_dlhandle handle, lt_ptr key_ptr) { struct my_module_data *my_data; my_data = lt_dlcaller_get_data (handle, (lt_dlcaller_id) *key_ptr); return process (my_data); } int my_dlcaller_foreach (lt_dlcaller_id key) { lt_dlforeach (my_dlcaller_callback, (lt_ptr) &key); }