Next: , Previous: Libltdl interface, Up: Using libltdl   [Contents][Index]


10.2 dlopen²Äǽ¤Ê¥â¥¸¥å¡¼¥ë¤ÎºîÀ®

libtool¥â¥¸¥å¡¼¥ë¤Ï¡¤¤¤¤¯¤Ä¤«¤ÎÎã³°¤Ï¤¢¤ê¤Þ¤¹¤¬¡¤Ä̾ï¤Îlibtool¥é¥¤¥Ö¥é ¥ê¤Ë»÷¤Æ¤¤¤Þ¤¹¡¥

libtool¤Î‘-module’¥¹¥¤¥Ã¥Á¤òÍѤ¤¤Æ¡¤¥â¥¸¥å¡¼¥ë¤È¥ê¥ó¥¯¤¹¤ëɬÍפ¬ ¤¢¤ê¡¤¤½¤·¤Æ¡¤dlopen¤ò¥µ¥Ý¡¼¥È¤·¤Æ¤¤¤Ê¤¤¥×¥é¥Ã¥È¥Õ¥©¡¼¥à¤Çlibtool¤¬ dlpreopen¤Ç¤­¤ë¤è¤¦¡¤‘-dlopen modulename.la’¤òÍѤ¤¤Æ¥â¥¸¥å¡¼¥ë¤ò dlopen¤¹¤ë¤¿¤á¤Ë¡¤¤¢¤é¤æ¤ë¥×¥í¥°¥é¥à¤È¥ê¥ó¥¯¤¹¤Ù¤­¤Ç¤¹¡¥¥â¥¸¥å¡¼¥ë¤¬¡¤ ¤¢¤é¤æ¤ë¾¤Î¥é¥¤¥Ö¥é¥ê¤Ë°Í¸¤¹¤ë¾ì¹ç¡¤¥â¥¸¥å¡¼¥ë¤È¥ê¥ó¥¯¤¹¤ë¤È¤­¤ä¡¤¤½ ¤ì¤òdlopen¤¹¤ë¥×¥í¥°¥é¥à¤ò¥ê¥ó¥¯¤¹¤ë¤È¤­¡¤¤½¤ì¤é¤ò³Î¼Â¤Ë»ØÄꤷ¤Æ¤¯¤À¤µ ¤¤¡¥ÆÃÄê¤Î¥â¥¸¥å¡¼¥ë¤ËÂФ·see Versioning¤ò»ÈÍѶػߤˤ·¤¿¤¤¾ì¹ç¡¤ ‘-avoid-version’¥¹¥¤¥Ã¥Á¤òÍѤ¤¤Æ¥ê¥ó¥¯¤¹¤Ù¤­¤Ç¤¹¡¥libtool¥â¥¸¥å¡¼ ¥ë¤Ï¡¤"lib"ÀÜÆ¬¼­¤¬ÉÔÍפʤ³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡¥¤·¤«¤·¡¤automake 1.4 ¤ä¤½¤ì°Ê¹ß¤Î¤â¤Î¤Ï¡¤¤½¤Î¤è¤¦¤Ê¥â¥¸¥å¡¼¥ë¤Î¥Ó¥ë¥É¤¬É¬ÍפǤ¹¡¥

Ä̾¤½¤ÎÆâÉô¤òÃΤëɬÍפʤ·¤Ë¥×¥í¥°¥é¥à¤¬dlopen¤Ç¤­¤ë¤è¤¦¡¤°ìÁȤΥ⠥¸¥å¡¼¥ë¤ÏƱ¤¸¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹Ä󶡤·¡¤¤¹¤Ê¤ï¤ÁƱ¤¸¥·¥ó¥Ü¥ë¤ò¥¨¥¯¥¹¥Ý¡¼ ¥È¤·¤Þ¤¹¡¥¤¹¤Ù¤Æ¤Î¥¨¥¯¥¹¥Ý¡¼¥È¤µ¤ì¤¿¥·¥ó¥Ü¥ë¤Ç¡¤¥·¥ó¥Ü¥ë¤Î¾×ÆÍ¤òÈò¤±¤ë ¤¿¤á¡¤"modulename_LTX_"¤òÁ°ÃÖ¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹(‘modulename’¤Ï¥â ¥¸¥å¡¼¥ë̾¤Ç¤¹)¡¥ÆâÉô¥·¥ó¥Ü¥ë¤Ï¡¤Î㤨¤Ð"_modulename_"¤òÁ°ÃÖ¤¹¤ë¤È¤¤¤Ã ¤¿¡¤Â¾¤Î¥â¥¸¥å¡¼¥ë¤È¾×ÆÍ¤·¤Ê¤¤¤è¤¦¤ÊÊýË¡¤Ç̿̾¤¹¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡¥°ì²ó °Ê¾åÀë¸À¤µ¤ì¤¿¡¤Æ±¤¸¥·¥ó¥Ü¥ë¤ò»ý¤Ä¤³¤È¤ò¥µ¥Ý¡¼¥È¤¹¤ë¥·¥¹¥Æ¥à¤â¤¢¤ê¤Þ¤¹ ¤¬¤½¤ì¤ÏÄ̾ï°Ü¿¢À­¤¬¤Ê¤¯¡¤¤½¤Î¤è¤¦¤Ê¥â¥¸¥å¡¼¥ë¤òdlpreopen¤¹¤ë¤³¤È¤òÉÔ ²Äǽ¤Ë¤·¤Þ¤¹¡¥libltdl¤Ï¡¤¥·¥ó¥Ü¥ë¤ÎËÜÅö¤Î̾Á°¤òÆÀ¤ë¤È¤­¡¤¼«Æ°Åª¤ËÀÜÆ¬ ¼­¤òÀÚ¤ê¼è¤ê¤Þ¤¹¡¥¤µ¤é¤Ë¡¤Èólibtool¥â¥¸¥å¡¼¥ë¤âdlopen¤Ç¤­¤ë¤è¤¦¡¤ÀÜÆ¬ ¼­¤ò»ÈÍѤ·¤Æ¤¤¤Ê¤¤¥â¥¸¥å¡¼¥ë¤ò¥µ¥Ý¡¼¥È¤·¤Þ¤¹¡¥

foo1.c¤Ï°Ü¿¢²Äǽ¤Êlibtool¥â¥¸¥å¡¼¥ë¤ÎÎã¤Ç¤¹¡¥¥¨¥¯¥¹¥Ý¡¼¥È¤µ¤ì¤¿ ¥·¥ó¥Ü¥ë¤Ï"foo1_LTX_"¡¤ÆâÉô¥·¥ó¥Ü¥ë¤Ï"_foo1_"¤¬Á°ÃÖ¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥¥³¡¼ ¥É¤Î²ÄÆÉÀ­¤ò¹â¤á¤ë¤¿¤á¡¤¥¨¥¤¥ê¥¢¥¹¤ÏºÇ½é¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤Þ¤¹¡¥

/* aliases for the exported symbols */
#define foo	foo1_LTX_foo
#define bar	foo1_LTX_bar

/* a global variable definition */
int bar = 1;

/* a private function */
int _foo1_helper() {
  return bar;
}

/* an exported function */
int foo() {
  return _foo1_helper();
}

Makefile.am¤Ï¡¤¥â¥¸¥å¡¼¥ëfoo1.la¤ò¥Ó¥ë¥É¤¹¤ë¤Î¤ËɬÍפʵ¬ §¤ò´Þ¤ó¤Ç¤¤¤Þ¤¹¡¥

...
lib_LTLIBRARIES = foo1.la

foo1_la_SOURCES = foo1.c
foo1_la_LDFLAGS = -module
...