{"id":83,"date":"2010-04-17T21:59:35","date_gmt":"2010-04-18T06:59:35","guid":{"rendered":"\/blog\/?p=83"},"modified":"2023-09-21T09:41:18","modified_gmt":"2023-09-21T00:41:18","slug":"%eb%8f%99%ec%a0%81-%ec%a0%81%ec%9e%acdl-%eb%9d%bc%ec%9d%b4%eb%b8%8c%eb%9f%ac%eb%a6%ac","status":"publish","type":"post","link":"https:\/\/hasu0707.duckdns.org\/blog\/?p=83","title":{"rendered":"\ub3d9\uc801 \uc801\uc7ac(DL) \ub77c\uc774\ube0c\ub7ec\ub9ac"},"content":{"rendered":"\n<FONT size=4><STRONG>\ub3d9\uc801 \uc801\uc7ac(DL) \ub77c\uc774\ube0c\ub7ec\ub9ac<\/STRONG><\/FONT>\n<P>&nbsp;<\/P>\n<P>\ub3d9\uc801 \uc801\uc7ac \ub77c\uc774\ube0c\ub7ec\ub9ac\ub294 \ud504\ub85c\uadf8\ub7a8\uc774 \uc2dc\uc791\ud560\ub54c\uac00 \uc544\ub2cc \ub2e4\ub978 \uc2dc\uae30\uc5d0 \uc801\uc7ac\ub418\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc774\ub2e4. \uc774\uac83\ub4e4\uc740 \ud50c\ub7ec\uadf8\uc778\uc774\ub098 \ubaa8\ub4c8\uc744 \uad6c\ud604\ud560\ub54c \uc801\ud569\ud558\ub2e4. \uc65c\ub0d0\ud558\uba74 \uadf8\uac83\ub4e4\uc774 \ud544\uc694\ud574\uc9c8\ub54c\uae4c\uc9c0 \uc801\uc7ac\ub97c \uae30\ub2e4\ub9b4 \uc218 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4. \uc608\ub97c\ub4e4\uc5b4, PAM(Pluggable Authentication Modules)\uc2dc\uc2a4\ud15c\uc740 \uad00\ub9ac\uc790\uac00 \uc778\uc99d\uc744 \uad00\ub9ac\ud558\ub294 \uac83\uc744 \ud5c8\uc6a9\ud558\uae30 \uc704\ud574 DL\ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud55c\ub2e4. \uc774\uac83\ub4e4\uc740 \ub610\ud55c \ub54c\ub54c\ub85c \ucf54\ub4dc\ub97c \uba38\uc2e0 \ucf54\ub4dc\ub85c \ubc14\uafb8\uace0 \ud6a8\uc728\uc744 \uc704\ud574 \uba48\ucd94\uc9c0 \uc54a\uace0 \ucef4\ud30c\uc77c\ub41c \ucf54\ub4dc\ub85c \ub9cc\ub4dc\ub294 \uc778\ud130\ud504\ub9ac\ud130\ub97c \uad6c\ud604\ud558\ub294\ub370 \uc720\uc6a9\ud558\ub2e4. \uc774\uac83\uc740 \uc2e4\uc2dc\uac04\uc758(just-in-time) \ucef4\ud30c\uc77c\ub7ec\ub098 MUD(multi-user dungeon)\uc744 \uad6c\ud604\ud558\ub294\ub370\uc5d0 \uc720\uc6a9\ud558\ub2e4.<\/P>\n<P>\ub9ac\ub205\uc2a4\uc5d0\uc11c, DL \ub77c\uc774\ube0c\ub7ec\ub9ac\ub294 \uadf8\ub4e4\uc758 \ud3ec\uba67\uc758 \uad00\uc810\uc5d0 \uc788\uc5b4\uc11c \ud2b9\ubcc4\ud558\uc9c0 \uc54a\ub2e4; \uadf8\ub4e4\uc740 \ud45c\uc900\uc758 \uc624\ube0c\uc81d\ud2b8 \ud30c\uc77c\ub85c \ub9cc\ub4e4\uc5b4\uc9c0\uac70\ub098, \uc704\uc5d0\uc11c \uc5b8\uae09\ub41c \ud45c\uc900\uc758 \uacf5\uc720 \ub77c\uc774\ube0c\ub7ec\ub9ac \ud30c\uc77c\ub85c \ub9cc\ub4e4\uc5b4\uc9c4\ub2e4. \uc8fc\uc694 \ucc28\uc774\uc810\uc740 \ud504\ub85c\uadf8\ub7a8\uc758 \ub9c1\ud06c\uc2dc\ub098 \uc2dc\uc791\uc2dc\uc5d0 \uc801\uc7ac\ub418\uc9c0 \uc54a\ub294\ub2e4\ub294 \uac83\uc774\ub2e4; \ub300\uc2e0, \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc5f4\uac70\ub098, \uc2ec\ubcfc\uc744 \ucc3e\uac70\ub098, \uc5d0\ub7ec\ub97c \uc870\uc815\ud558\uac70\ub098, \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ub2eb\ub294 \ud2b9\ubcc4\ud55c API\uac00 \uc788\ub2e4. C \uc0ac\uc6a9\uc790\ub4e4\uc740 \uc774\ub7f0 API\ub97c \uc0ac\uc6a9\ud558\uae30\uc704\ud574 dlfcn.h\ub77c\ub294 \ud5e4\ub354\ud30c\uc77c\uc744 \ud3ec\ud568\ud574\uc57c \ud55c\ub2e4.<\/P>\n<P>\ub9ac\ub205\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ub418\ub294 \uc778\ud130\ud398\uc774\uc2a4\ub294 \uc194\ub77c\ub9ac\uc2a4\uc5d0\uc11c \uc0ac\uc6a9\ub418\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc640 \uac19\ub2e4. \uc774\uac83\uc744 \ub098\ub294 ``dlopen()'' API\ub77c\uace0 \ubd88\ub97c \uac83\uc774\ub2e4. \uadf8\ub7ec\ub098, \uc774 \uac19\uc740 \uc778\ud130\ud398\uc774\uc2a4\uac00 \ubaa8\ub4e0 \ud50c\ub7ab\ud3fc\uc5d0\uc11c \uc9c0\uc6d0\ub418\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4; HP-UX\ub294 shl_load()\ubc29\ubc95\uc744 \uc0ac\uc6a9\ud558\uace0, \uc708\ub3c4\uc6b0\uc988\ub294 \uc644\uc804\ud788 \ub2e4\ub978 \uc778\ud130\ud398\uc774\uc2a4\uc758 DLLs\uc744 \uc0ac\uc6a9\ud55c\ub2e4. \ub9cc\uc57d \ub2f9\uc2e0\uc774 \ud3ed\ub113\uc740 \ud3ec\ud305\uc131\uc774 \ubaa9\ud45c\ub77c\uba74, \ub2f9\uc2e0\uc740 \uc774\ub7f0 \ub2e4\ub978 \ud50c\ub7ab\ud3fc\uc744 \uc228\uae30\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0dd\uac01\ud574\uc57c \ud560\uac83\uc774\ub2e4. \ud558\ub098\uc758 \ubc29\ubc95\uc740 \ubaa8\ub4c8\uc758 \ub3d9\uc801 \uc801\uc7ac\ub97c \uc9c0\uc6d0\ud558\ub294 glib \ub77c\uc774\ube0c\ub7ec\ub9ac\uc774\ub2e4; \uadf8\uac83\uc740 \uc774 \ud568\uc218\ub4e4\uc758 \ud3ec\ud305\uac00\ub2a5\ud55c \uc778\ud130\ud398\uc774\uc2a4\ub97c \uad6c\ud604\ud558\uae30\uc704\ud574 \ud50c\ub7ab\ud3fc\uc758 \ub3d9\uc801 \uc801\uc7ac \ub8e8\ud2f4\uc744 \uc0ac\uc6a9\ud55c\ub2e4. <a class=\"con_link\" href=\"http:\/\/developer.gnome.org\/doc\/API\/glib\/glib-dynamic-loading-of-modules.html\" target=\"_blank\" rel=\"noopener\">http:\/\/developer.gnome.org\/doc\/API\/glib\/glib-dynamic-loading-of-modules.html<\/A>\uc758 \ub9c1\ud06c\uc5d0\uc11c glib\uc5d0 \ub300\ud574 \ub9ce\uc740 \uac83\uc744 \ucc3e\uc544\ubcfc \uc218 \uc788\ub2e4. glib \uc778\ud130\ud398\uc774\uc2a4\uac00 \uc774 \ubb38\uc11c\uc5d0 \uc798 \uc124\uba85\ub418\uc788\uae30 \ub54c\ubb38\uc5d0 \ub354 \uc5b8\uae09\ud558\uc9c0 \uc54a\uaca0\ub2e4. \ub2e4\ub978 \ubc29\ubc95\uc740 <a class=\"con_link\" href=\"http:\/\/www.gnu.org\/software\/libtool\/libtool.html\" target=\"_blank\" rel=\"noopener\">GNU libtool<\/A>\uc758 \uc77c\ubd80\uc778 libltdl\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc774\ub2e4. \ub2f9\uc2e0\uc774 \uc774\uac83\ubcf4\ub2e4 \ub354 \uae30\ub2a5\uc801\uc778\uac83\uc744 \uc6d0\ud55c\ub2e4\uba74, CORBA ORB(Object Request Broker)\ub97c \ucc3e\uc544\ubcf4\uc544\ub77c. \ub2f9\uc2e0\uc774 \ub9ac\ub205\uc2a4\uc640 \uc194\ub77c\ub9ac\uc2a4\uc5d0\uc11c \uc9c1\uc811 \uc9c0\uc6d0\ub418\ub294 \uac83\uc744 \uc544\uc9c1\ub3c4 \uc6d0\ud558\uace0 \uc788\ub2e4\uba74, \uacc4\uc18d \uc77d\uc5b4\ub098\uac00\ub77c.<\/P>\n<DIV class=SECT2>\n<H2 class=SECT2><a class=\"con_link\" name=\"DLOPEN\" target=\"_blank\" rel=\"noopener\">4.1. dlopen()<\/A><\/H2>\n<P>dlopen(3)\ud568\uc218\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc5f4\uace0 \uadf8\uac83\uc774 \uc0ac\uc6a9\ub418\ub3c4\ub85d \uc900\ube44\uc2dc\ucf1c\uc900\ub2e4. C\uc5d0\uc11c \ud504\ub85c\ud1a0\ud0c0\uc785\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4: <\/P>\n<TABLE border=0 width=\"100%\" bgColor=#e0e0e0>\n<TBODY>\n<TR>\n<TD><PRE class=PROGRAMLISTING>  void * dlopen(const char *filename, int flag);<\/PRE><\/TD><\/TR><\/TBODY><\/TABLE>\ud30c\uc77c\uc774\ub984\uc774 ``\/''(\uc989, \uc808\ub300\uacbd\ub85c)\ub85c \uc2dc\uc791\ud55c\ub2e4\uba74 dlopen()\uc740 \uc989\uc2dc \uc0ac\uc6a9\ud558\ub824 \ud55c\ub2e4(\ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ucc3e\uc73c\ub824 \ud558\uc9c0 \uc54a\ub294\ub2e4). \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74, dlopen()\uc740 \ub2e4\uc74c\uacfc \uac19\uc740 \uc21c\uc11c\ub85c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ucc3e\ub294\ub2e4: \n\n<OL type=1>\n<LI>\n<P>\uc0ac\uc6a9\uc790\uc758 LD_LIBRARY_PATH\uc758 \ud658\uacbd\ubcc0\uc218\uc758 \ucf5c\ub860\uc73c\ub85c \uad6c\ubd84\uc9c0\uc5b4\uc9c4 \ub514\ub809\ud1a0\ub9ac<\/P>\n<LI>\n<P>(\/etc\/ld.so.conf\uc5d0\uc11c \ud30c\uc0dd\ub41c) \/etc\/ld.so.cache\uc5d0 \uba85\uc2dc\ub418\uc5b4\uc788\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \ubaa9\ub85d<\/P>\n<LI>\n<P>\/lib, \/usr\/lib. \uc21c\uc11c\ub97c \uc8fc\uc758\ud558\ub77c; \uc774\uac83\uc740 \uc608\uc804\uc758 a.out\ub85c\ub354\uac00 \uc0ac\uc6a9\ud55c \uc21c\uc11c\uc758 \uc5ed\uc774\ub2e4. \uc608\uc804\uc758 a.out\ub85c\ub354\ub294 \ud504\ub85c\uadf8\ub7a8\uc744 \ub85c\ub4dc\ud560\ub54c \/usr\/lib\uc744 \ucc3e\uace0 \/lib\uc744 \ucc3e\uc558\ub2e4(ld.so(8)\uc758 man\ud398\uc774\uc9c0\ub97c \ucc38\uace0\ud558\ub77c). \ubcf4\ud1b5\uc740 \uc5b4\ub5a4 \ub514\ub809\ud1a0\ub9ac\ub098 \ub2e4\ub978\ub514\ub809\ud1a0\ub9ac \ud558\ub098\uc5d0\ub9cc \ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \uc788\uae30 \ub54c\ubb38\uc5d0(\ub458\ub2e4 \uc5c6\uc744\uc218\ub3c4 \uc788\ub2e4) \ubb38\uc81c\uac00 \ub418\uc9c0 \uc54a\ub294\ub2e4. \uadf8\ub9ac\uace0 \uac19\uc740\uc774\ub984\uc744 \uac00\uc9c4 \ub2e4\ub978 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub294 \uc7a0\uc7ac\uc801\uc778 \uc704\ud5d8\uc744 \uac00\uc9c0\uace0 \uc788\ub2e4.<\/P><\/LI><\/OL>dlopen()\uc5d0\uc11c <TT class=REPLACEABLE><I><FONT face=\uad74\ub9bc\uccb4>flag<\/FONT><\/I><\/TT>\uc758 \uac12\uc740 ``\ub3d9\uc801 \ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \uc2e4\ud589\ub418\uba74\uc11c \ucf54\ub4dc\uc758 \uc815\uc758\ub418\uc9c0 \uc54a\uc740 \uc2ec\ubcfc\uc744 \ucc98\ub9ac\ud558\ub77c''\uc758 \uc758\ubbf8\ub97c \uac00\uc9c4 RTLD_LAZY\uc774\uac70\ub098, ``dlopen()\uc774 \ub9ac\ud134\ud558\uae30 \uc804\uc5d0 \ubaa8\ub4e0 \uc815\uc758\ub418\uc9c0 \uc54a\uc740 \uc2ec\ubcfc\uc744 \ucc98\ub9ac\ud558\uace0, \uadf8\uac83\uc774 \ub418\uc9c0 \uc54a\uc744 \uacbd\uc6b0 \uc2e4\ud328\ud558\ub77c''\uc758 \uc758\ubbf8\ub97c \uc9c0\ub2cc RTLD_NOW\uac00 \uc788\ub2e4. RTLD_GLOBAL\uc740 <TT class=REPLACEABLE><I><FONT face=\uad74\ub9bc\uccb4>flag<\/FONT><\/I><\/TT>\uc758 \uac12\uc18d\uc5d0 \uc635\uc158\uc73c\ub85c \uc4f8\uc218 \uc788\ub2e4. \uc758\ubbf8\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \uc801\uc7ac\ub418\ub294 \uc678\ubd80 \uc2ec\ubcfc\ub4e4\uc740 \uadf8 \ud6c4\uc5d0 \uc801\uc7ac\ub418\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0 \uc758\ud574\uc11c \uac00\ub2a5\ud558\ub2e4\ub294 \uac83\uc774\ub2e4. \ub514\ubc84\uae45\uc2dc\uc5d0, RTLD_NOW\ub97c \uc4f0\uae30\ub97c \uc6d0\ud560\uac83\uc774\ub2e4; RTLD_LAZY\ub294 \uc815\uc758\ub418\uc9c0 \uc54a\uc740 \uc2ec\ubcfc\uc774 \uc788\uc73c\uba74 \uc54c\uc544\ubcfc\uc218 \uc5c6\ub294 \uc5d0\ub7ec\ub97c \ub0b4\uae30 \ub54c\ubb38\uc774\ub2e4. RTLD_NOW\ub97c \uc4f0\uba74\uc11c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc5ec\ub294 \uac83\uc740 \uc57d\uac04\uc758 \uc2dc\uac04\uc774 \ub354 \uac78\ub9b0\ub2e4(\ud558\uc9c0\ub9cc \ub098\uc911\uc5d0 \ucc3e\ub294 \uc18d\ub3c4\ub294 \ube68\ub77c\uc9c4\ub2e4); \ub9cc\uc57d \uc774\uac83\uc774 \uc720\uc800 \uc778\ud130\ud398\uc774\uc2a4 \ubb38\uc81c\ub97c \uc77c\uc73c\ud0a8\ub2e4\uba74, \ub2f9\uc2e0\uc740 \ub098\uc911\uc5d0 RTLD_LAZY\ub85c \ubc14\uafc0 \uc218 \uc788\ub2e4. \n\n<P>\ub77c\uc774\ube0c\ub7ec\ub9ac\ub4e4\uc774 \uc11c\ub85c \uc758\uc874\ud55c\ub2e4\uba74(\uc608\ub97c\ub4e4\uc5b4 X\uac00 Y\uc5d0 \uc758\uc874\ud55c\ub2e4\uba74), \ub2f9\uc2e0\uc740 \uc758\uc874\ub2f9\ud558\ub294 \uac83\uc744 \uba3c\uc800 \ub85c\ub4dc\ud574\uc57c\ud55c\ub2e4(\uc774 \uc608\uc81c\uc5d0\uc11c Y\ub97c \ub85c\ub4dc\ud558\uace0 X\ub97c \ub85c\ub4dc\ud574\uc57c \ud55c\ub2e4).<\/P>\n<P>dlopen()\uc758 \ub9ac\ud134 \uac12\uc740 \ub2e4\ub978 DL\ub77c\uc774\ube0c\ub7ec\ub9ac \ub8e8\ud2f4\uc774 \uc0ac\uc6a9\ud558\uae30\uc5d0 \uc560\ub9e4\ubaa8\ud638\ud558\uac8c \ub290\uaef4\uc9c0\ub294 ``\ud578\ub4e4''\uc774\ub2e4. dlopen()\uc740 \ub85c\ub4dc\uac00 \uc131\uacf5\ud558\uc9c0 \ubabb\ud558\uac70\ub098 \ub2f9\uc2e0\uc774 \uccb4\ud06c\ud574\uc57c \ud560 \ud544\uc694\uac00 \uc788\ub2e4\uace0 \uc0dd\uac01\ud558\uba74 NULL\uc744 \ub9ac\ud134\ud55c\ub2e4. dlopen()\uc5d0 \uc758\ud574 \uac19\uc740 \ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \ud55c\ubc88\uc774\uc0c1 \ub85c\ub4dc\ub418\uba74 \uac19\uc740 \ud30c\uc77c \ud578\ub4e4\uc774 \ub9ac\ud134\ub41c\ub2e4.<\/P>\n<P>\ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 _init\uc774\ub77c \uc774\ub984\uc9c0\uc5b4\uc9c4 \ub8e8\ud2f4\uc744 \uc0ac\uc6a9\ud55c\ub2e4\uba74(export), \uadf8 \ucf54\ub4dc\ub294 dlopen()\uc774 \ubc18\ud658\ud558\uae30 \uc804\uc5d0 \uc2e4\ud589\ub41c\ub2e4. \ub2f9\uc2e0\uc740 \ucd08\uae30\ud654 \ub8e8\ud2f4\uc744 \uad6c\ud604\ud558\uae30\uc704\ud574 \ub2f9\uc2e0\uc758 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc5d0\uc11c \uc774 \uc0ac\uc2e4\uc744 \uc0ac\uc6a9\ud588\uc744\uac83\uc774\ub2e4. \ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \uc704\ud574 <a class=\"con_link\" href=\"http:\/\/kldp.org\/HOWTO\/html\/Program-Library-HOWTO\/miscellaneous.html#INIT-AND-FINI\" target=\"_blank\" rel=\"noopener\">5.2\uc808<\/A>\uc744 \ubcf4\uc544\ub77c.<\/P><\/DIV>\n<DIV class=SECT2>\n<H2 class=SECT2><a class=\"con_link\" name=\"DLERROR\" target=\"_blank\" rel=\"noopener\">4.2. dlerror()<\/A><\/H2>\n<P>\uc5d0\ub7ec\ub294 dlerror()\ub97c \ud638\ucd9c\ud568\uc73c\ub85c\uc368 \ubcf4\uace0\ub420\uc218 \uc788\ub2e4. dlerror()\ub294 dlerror(), dlsym(), dlclose()\uc911 \ub9c8\uc9c0\ub9c9 \ubd80\ub978\uac83\uc758 \uc5d0\ub7ec\uc758 \uc2a4\ud2b8\ub9c1\uc744 \ubc18\ud658\ud55c\ub2e4. \ud558\ub098\uc758 \uc774\uc0c1\ud55c\uc810\uc740 dlerror()\ub97c \ubd80\ub974\uace0 \ub098\uc11c dlerror()\ub97c \ubd80\ub974\ub294 \uac83\uc740 \uadf8 \uc0ac\uc774\uc5d0 \ub2e4\ub978 \uc5d0\ub7ec\uac00 \uc5c6\uc73c\uba74 NULL\uc744 \ubc18\ud658\ud55c\ub2e4\ub294 \uac83\uc774\ub2e4.<\/P><\/DIV>\n<DIV class=SECT2>\n<H2 class=SECT2><a class=\"con_link\" name=\"DLSYM\" target=\"_blank\" rel=\"noopener\">4.3. dlsym()<\/A><\/H2>\n<P>\ub2f9\uc2e0\uc774 \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub2e4\uba74 DL\ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ub85c\ub529\ud558\ub294 \uc758\ubbf8\uac00 \uc5c6\ub2e4. DL\ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\ub294 \uc911\uc694\ud55c \ub8e8\ud2f4\uc740 dlsym(3)\uc774\ub2e4. \uc774\uac83\uc740 \uc5f4\ub824\uc9c4 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc758 \uc2ec\ubcfc\uc758 \uac12\uc744 \ucc3e\uc544\uc900\ub2e4. \uc774 \ud568\uc218\ub294 \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc758\ub41c\ub2e4: <\/P>\n<TABLE border=0 width=\"100%\" bgColor=#e0e0e0>\n<TBODY>\n<TR>\n<TD><PRE class=PROGRAMLISTING> void * dlsym(void *handle, char *symbol);<\/PRE><\/TD><\/TR><\/TBODY><\/TABLE>\ud578\ub4e4\uc740 dlopen\uc5d0 \uc758\ud574 \ubc18\ud658\ub41c \uac12\uc774\uace0, \uc2ec\ubcfc\uc740 NIL\ub85c \ub05d\ub098\ub294 \uc2a4\ud2b8\ub9c1\uc774\ub2e4. \ub2f9\uc2e0\uc774 \ud560 \uc218 \uc788\ub2e4\uba74 \uc788\ub2e4\uba74, dlsym()\uc758 \uacb0\uacfc\ub97c void* \ud3ec\uc778\ud130\ub85c \uc800\uc7a5\ud558\uc9c0 \ub9c8\ub77c. \uc65c\ub0d0\ud558\uba74, \ub2f9\uc2e0\uc740 \uc0ac\uc6a9\ud560\ub54c\ub9c8\ub2e4 \uce90\uc2a4\ud2b8\ud574\uc11c \uc0ac\uc6a9\ud574\uc57c \ud558\uae30\ub54c\ubb38\uc774\ub2e4(\uadf8\ub9ac\uace0 \ub2e4\ub978\uc0ac\ub78c\ub4e4\uc774 \ud504\ub85c\uadf8\ub7a8\uc744 \uc720\uc9c0\ud558\ub294\ub370\uc5d0 \ub354 \uc801\uc740 \uc815\ubcf4\ub97c \uc904\uac83\uc774\ub2e4).\n\n<P>dlsym()\uc740 \uc2ec\ubcfc\uc774 \uc5c6\uc73c\uba74 NULL\uc744 \ubc18\ud658\ud560 \uac83\uc774\ub2e4. \ub9cc\uc57d \ub2f9\uc2e0\uc758 \uc2ec\ubcfc\uc5d0 NULL\uc774\ub098 0\uc774 \uc5c6\ub2e4\ub294 \uac83\uc744 \uc54c\uba74 \uc88b\uaca0\uc9c0\ub9cc, \ub2e4\uc74c\uacfc \uac19\uc740 \uc7a0\uc7ac\uc801\uc778 \ubb38\uc81c\uac00 \uc788\ub2e4: \ub2f9\uc2e0\uc774 \ubc1b\uc740 NULL\uc774 \uc5d0\ub7ec\uc778\uac00, \uc544\ub2c8\uba74 \uc2ec\ubcfc\uc758 \uac12\uc774 NULL\uc778\uac00? \ud45c\uc900\uc801\uc778 \ud574\uacb0\ubc95\uc740 dlerror()\ub97c \ubd80\ub974\uace0(\uc804\uc5d0 \uc788\ub358 \uc5d0\ub7ec\ub4e4\uc744 \uc5c6\uc564\ub2e4), dlsym()\uc744 \ubd88\ub7ec\uc11c \uc2ec\ubcfc\uc758 \uac12\uc744 \ubd80\ub974\uace0, dlerror()\ub97c \ubd88\ub7ec\uc11c \uc5d0\ub7ec\uac00 \ub0ac\ub294\uc9c0 \uccb4\ud06c\ud55c\ub2e4. \ub2e8\uc21c\ud55c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4: <\/P>\n<TABLE border=0 width=\"100%\" bgColor=#e0e0e0>\n<TBODY>\n<TR>\n<TD><PRE class=PROGRAMLISTING> dlerror(); \/* clear error code *\/\n s = (actual_type) dlsym(handle, symbol_being_searched_for);\n if ((err = dlerror()) != NULL) {\n  \/* handle error, the symbol wasn't found *\/\n } else {\n  \/* symbol found, its value is in s *\/\n }<\/PRE><\/TD><\/TR><\/TBODY><\/TABLE>\n<\/DIV>\n<DIV class=SECT2>\n<H2 class=SECT2><a class=\"con_link\" name=\"DLCLOSE\" target=\"_blank\" rel=\"noopener\">4.4. dlclose()<\/A><\/H2>\n<P>dlopen()\uc758 \ubc18\ub300\ub294 dlclose()\ub85c\uc11c, DL \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ub2eb\uc544\uc900\ub2e4. DL \ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \ub3d9\uc801 \ud30c\uc77c \ud578\ub4e4\uc758 \ub9c1\ud06c \uc218\ub97c \uad00\ub9ac\ud558\uae30 \ub54c\ubb38\uc5d0, \ub3d9\uc801 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub294 dlopen\uc774 \uc131\uacf5\ud55c \ub9cc\ud07c \ubaa8\ub450 dlclose\ub97c \ubd88\ub7ec\uc8fc\uae30 \uc804\uc5d0 \ub2e4 \ud560\ub2f9\uc774 \uc5c6\uc5b4\uc9c0\uc9c0\ub294 \uc54a\ub294\ub2e4. \ub530\ub77c\uc11c, \uac19\uc740 \ud504\ub85c\uadf8\ub7a8\uc774 \uac19\uc740 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc5ec\ub7ec\ubc88 \ubd88\ub7ec\uc8fc\ub294\uac83\uc740 \ubb38\uc81c\uac00 \ub418\uc9c0 \uc54a\ub294\ub2e4. \ub77c\uc774\ube0c\ub7ec\ub9ac\uac00 \ud560\ub2f9\uc774 \uc5c6\uc5b4\uc9c4\ub2e4\uba74, \ud568\uc218\uc758 _fini\uac00 \ubd88\ub9b0\ub2e4(\uc874\uc7ac\ud55c\ub2e4\uba74); \ub354 \uc790\uc138\ud55c \uc815\ubcf4\ub97c \uc704\ud574 <a class=\"con_link\" href=\"http:\/\/kldp.org\/HOWTO\/html\/Program-Library-HOWTO\/miscellaneous.html#INIT-AND-FINI\" target=\"_blank\" rel=\"noopener\">5.2\uc808<\/A>\ub97c \ubcf4\uc544\ub77c. \uc8fc\uc758\ud558\ub77c : dlclose()\ub294 \uc131\uacf5\ud558\uba74 0\uc744 \ub9ac\ud134\ud558\uace0, \uc544\ub2c8\uba74 0\uc774 \uc544\ub2cc \uac12\uc744 \ub9ac\ud134\ud55c\ub2e4; \uc5b4\ub5a4 \ub9ac\ub205\uc2a4 \uba54\ub274\uc5bc\uc740 \uc774\uac83\uc744 \uc5b8\uae09\ud558\uace0 \uc788\uc9c0 \uc54a\ub2e4.<\/P><\/DIV>\n<DIV class=SECT2>\n<H2 class=SECT2><a class=\"con_link\" name=\"DL-LIBRARY-EXAMPLE\" target=\"_blank\" rel=\"noopener\">4.5. DL \ub77c\uc774\ube0c\ub7ec\ub9ac \uc608\uc81c<\/A><\/H2>\n<P>\uc5ec\uae30\uc5d0 \uc788\ub294 \uc608\uc81c\ub294 dlopen(3)\uc758 \ub9e8\ud398\uc774\uc9c0\uc5d0 \ub098\uc624\ub294 \uc608\uc81c\uc774\ub2e4. \uc774 \uc608\uc81c\ub294 math\ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \ub85c\ub4dc\ud574\uc11c, \ucf54\uc0ac\uc778 2.0\uc744 \ucd9c\ub825\ud55c\ub2e4. \ub610\ud55c, \uac01\uac01\uc758 \ub2e8\uacc4\uc5d0\uc11c \uc5d0\ub7ec \uccb4\ud06c\ub97c \ud55c\ub2e4(\uc774\ub807\uac8c \ud558\uae30\ub97c \ucd94\ucc9c\ud55c\ub2e4). <\/P>\n<TABLE border=0 width=\"100%\" bgColor=#e0e0e0>\n<TBODY>\n<TR>\n<TD><PRE class=PROGRAMLISTING>    #include &lt;stdlib.h&gt;\n    #include &lt;stdio.h&gt;\n    #include &lt;dlfcn.h&gt;\n\n    int main(int argc, char **argv) {\n        void *handle;\n        double (*cosine)(double);\n        char *error;\n\n        handle = dlopen (\"\/lib\/libm.so.6\", RTLD_LAZY);\n        if (!handle) {\n            fputs (dlerror(), stderr);\n            exit(1);\n        }\n\n        cosine = dlsym(handle, \"cos\");\n        if ((error = dlerror()) != NULL)  {\n            fputs(error, stderr);\n            exit(1);\n        }\n\n        printf (\"%f\\n\", (*cosine)(2.0));\n        dlclose(handle);\n    }<\/PRE><\/TD><\/TR><\/TBODY><\/TABLE>\n\n<P>\ub9cc\uc57d \uc774 \ud504\ub85c\uadf8\ub7a8\uc758 \ud30c\uc77c\uc774\ub984\uc774 \"foo.c\"\ub77c\uba74, \ub2e4\uc74c\uacfc \uac19\uc740 \uba85\ub839\uc73c\ub85c \ud504\ub85c\uadf8\ub7a8\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc744 \uac83\uc774\ub2e4: <\/P>\n<TABLE border=0 width=\"100%\" bgColor=#e0e0e0>\n<TBODY>\n<TR>\n<TD><PRE class=PROGRAMLISTING>    gcc -o foo foo.c -ldl<\/PRE><\/TD><\/TR><\/TBODY><\/TABLE><\/DIV>\n","protected":false},"excerpt":{"rendered":"<p>\ub3d9\uc801 \uc801\uc7ac(DL) \ub77c\uc774\ube0c\ub7ec\ub9ac &nbsp; \ub3d9\uc801 \uc801\uc7ac \ub77c\uc774\ube0c\ub7ec\ub9ac\ub294 \ud504\ub85c\uadf8\ub7a8\uc774 \uc2dc\uc791\ud560\ub54c\uac00 \uc544\ub2cc \ub2e4\ub978 \uc2dc\uae30\uc5d0 \uc801\uc7ac\ub418\ub294 \ub77c\uc774\ube0c\ub7ec\ub9ac\uc774\ub2e4. \uc774\uac83\ub4e4\uc740 \ud50c\ub7ec\uadf8\uc778\uc774\ub098 \ubaa8\ub4c8\uc744 \uad6c\ud604\ud560\ub54c \uc801\ud569\ud558\ub2e4. \uc65c\ub0d0\ud558\uba74 \uadf8\uac83\ub4e4\uc774 \ud544\uc694\ud574\uc9c8\ub54c\uae4c\uc9c0 \uc801\uc7ac\ub97c \uae30\ub2e4\ub9b4 \uc218 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4. \uc608\ub97c\ub4e4\uc5b4, PAM(Pluggable Authentication Modules)\uc2dc\uc2a4\ud15c\uc740 \uad00\ub9ac\uc790\uac00 \uc778\uc99d\uc744 \uad00\ub9ac\ud558\ub294 \uac83\uc744 \ud5c8\uc6a9\ud558\uae30 \uc704\ud574 DL\ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud55c\ub2e4. \uc774\uac83\ub4e4\uc740 \ub610\ud55c \ub54c\ub54c\ub85c \ucf54\ub4dc\ub97c \uba38\uc2e0 \ucf54\ub4dc\ub85c \ubc14\uafb8\uace0 \ud6a8\uc728\uc744 \uc704\ud574 \uba48\ucd94\uc9c0 \uc54a\uace0 \ucef4\ud30c\uc77c\ub41c \ucf54\ub4dc\ub85c \ub9cc\ub4dc\ub294 \uc778\ud130\ud504\ub9ac\ud130\ub97c \uad6c\ud604\ud558\ub294\ub370 [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[22],"tags":[],"class_list":["post-83","post","type-post","status-publish","format-standard","hentry","category-development_unix"],"_links":{"self":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/83","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=83"}],"version-history":[{"count":0,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=\/wp\/v2\/posts\/83\/revisions"}],"wp:attachment":[{"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=83"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=83"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasu0707.duckdns.org\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=83"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}