|
DocbookSgml/BackspaceDelete › DocbookSgml/Beginner_QA-KLDP › DocbookSgml/Boot_Process-KLDP › DocbookSgml/Bootdisk-HOWTO › DocbookSgml/Bootsplash-HOWTO › DocbookSgml/C++-dlopen C++ dlopen mini HOWTOIsottonAaron±è°æÅÂ
1. ¼Ò°³ Unix C++ ÇÁ·Î±×·¡¸Ó »çÀÌ¿¡¼ ÀÚÁÖ ¹ß»ýÇÏ´Â Áú¹®Àº
»ç½Ç À̰ÍÀº Ç×»ó °£´ÜÇÑ °Í¸¸Àº ¾Æ´Ï±â ¶§¹®¿¡,¾à°£ÀÇ ¼³¸íÀÌ ÇÊ¿äÇÕ´Ï´Ù. ÀÌ mini HOWTO¿¡¼ ±×°Í¿¡ °üÇÑ ³»¿ëÀ» ´Ù·ç°í ÀÖ½À´Ï´Ù. ÀÌ ¹®¼¸¦ ÀÌÇØÇϱâ À§Çؼ´Â C,
C++,±×¸®°í ÀÌ HOWTOÀÇ ¿ø¹®Àº http://www.isotton.com/howtos/C++-dlopen-mini-HOWTO/¿¡ ÀÖ½À´Ï´Ù. 1.1. Copyright and LicenseÀÌ ¹®¼ C++ dlopen mini HOWTOÀÇ ÀúÀÛ±ÇÀº Aaron Isotton ¿¡°Ô ÀÖ½À´Ï´Ù. ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾î Àç´Ü¿¡¼ ¹ßÇ¥ÇÑ, 1.1 ȤÀº ±× ÀÌÈÄ ¹öÀüÀÇ GNU Free Documentation LicenseÀÇ Á¶Ç׿¡ µû¶ó ÀÌ ¹®¼¸¦ º¹»çÇϰųª, ¹èÆ÷ ȤÀº º¯°æÇÏ´Â °ÍÀÌ Çã¿ëµË´Ï´Ù. 1.2. °æ°í(Disclaimer)ÀÌ ¹®¼ÀÇ ³»¿ëÀ¸·Î ÀÎÇÑ Ã¥ÀÓÀº ÁöÁö ¾Ê½À´Ï´Ù. ¿©±â¿¡ ¾²¿©Áø °³³äÀ̳ª ¿¹Á¦ ±×¸®°í Á¤º¸¸¦ »ç¿ëÇÏ¿© ¹ß»ýÇÑ ¹®Á¦¿¡ ´ëÇÑ Ã¥ÀÓÀº ¸ðµÎ ´ç½ÅÀÇ Ã¥ÀÓÀÔ´Ï´Ù. ¿©±â¿¡´Â ´ç½ÅÀÇ ½Ã½ºÅÛ¿¡ ÇÇÇØ¸¦ ÁÙ ¼ö ÀÖ´Â ¿À·ù³ª ºÎÁ¤È®ÇÑ °ÍµéÀÌ ÀÖÀ»¼öµµ ÀÖ½À´Ï´Ù. ÁÖÀÇÇÏ¿© Áֽñ⠹ٶó¸ç, Àú´Â ¿©±â¿¡ ¾î¶°ÇÑ Ã¥ÀÓµµ ÁöÁö ¾ÊÀ» °ÍÀÔ´Ï´Ù. ¸ðµç ÀúÀÛ±ÇÀº ±¸Ã¼ÀûÀ¸·Î ¾ð±ÞÇÏÁö ¾Ê¾Ò´Ù¸é, ±×°Íµé °¢°¢ÀÇ ¼ÒÀ¯ÀÚ°¡ °¡Áö°í ÀÖ½À´Ï´Ù. ÀÌ ¹®¼¿¡ ÀÖ´Â ¿ë¾îÀÇ »ç¿ëÀÌ ¾î´À µî·Ï»óÇ¥³ª ¼ºñ½º ¸¶Å©ÀÇ È¿·Â¿¡ ¿µÇâÀ» ³¢Ä¡´Â °ÍÀ¸·Î °£ÁÖÇØ¼´Â ¾È µË´Ï´Ù. Ưº°ÇÑ Á¦Ç°À̳ª ºê·£µå¸¦ Áö¸íÇÏ´Â °ÍÀÌ »óǰµîÀÇ ÃßõÀ¸·Î º¸¿©¼´Â ¾È µË´Ï´Ù. 1.3. µµ¿Í ÁֽźÐÀÌ ¹®¼¿¡¼, ³ª´Â ÀÌ ºÐµé²² °¨»çÇÏ°Ô µÇ¾î ±â»Ú°Ô »ý°¢ÇÕ´Ï´Ù.
1.4. Feedback ÀÌ ¹®¼¿¡ ´ëÇÑ ¹ÝÀÀÀº ¾ðÁ¦³ª ȯ¿µÀÔ´Ï´Ù.
´ç½ÅÀÌ Ãß°¡ÇßÀ¸¸é ÇÏ´Â °Í, Àǰß, ºñÆÇÀ» ´ÙÀ½ ÁÖ¼Ò·Î º¸³»Áֽñâ
¹Ù¶ø´Ï´Ù 1.5. ÀÌ ¹®¼¿¡¼ ¾²ÀÎ ¿ë¾îµé
2. ¹®Á¦ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ¶§, ¶óÀ̺귯¸®¸¦ ÀûÀçÇØ¾ß ÇÒ ¶§°¡ °¡²û¾¿ ÀÖÀ» °ÍÀÔ´Ï´Ù. ´ç½ÅÀÌ ÇÁ·Î±×·¥¿¡ µé¾î°¡´Â Ç÷¯±×ÀÎÀ̳ª ¸ðµâÀ» ¸¸µé°í ÀÖÀ»¶§ ÀÌ·¯ÇÑ ÀÏÀº Á¾Á¾ ¹ß»ýÇÕ´Ï´Ù. C¾ð¾î¿¡¼, µ¿ÀûÀ¸·Î ¶óÀ̺귯¸®¸¦ ÀûÀçÇÏ´Â °ÍÀº ¸Å¿ì °£´ÜÇÕ´Ï´Ù.
( C++¿¡¼ ¶óÀ̺귯¸®¸¦ ÀûÀçÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ¼³¸íÇϱâ Àü¿¡, name mangling¿¡ ´ëÇØ¼ ÀÚ¼¼È÷ »ìÆìº¸°í, ¹®Á¦¸¦ ºÐ¼®ÇØ º¾½Ã´Ù. ºñ·Ï ´ç½ÅÀÌ name mangling¿¡ °ü½ÉÀÌ ¾ø´õ¶óµµ, ³ª´Â ´ç½ÅÀÌ ±×°Í¿¡ ´ëÇÑ ¼³¸íÀ» Àб⸦ ¹Ù¶ø´Ï´Ù. ¿Ö³ÄÇÏ¸é ±×°ÍÀº ´ç½ÅÀÌ ¿Ö ¹®Á¦°¡ ¹ß»ýÇÏ°í ¾î¶»°³ ÇØ°áÇØ¾ß ÇÏ´ÂÁö¸¦ ÀÌÇØÇϴµ¥ µµ¿òÀ» Áֱ⠶§¹®ÀÔ´Ï´Ù. 2.1. Name Mangling¸ðµç C++ÇÁ·Î±×·¥(ȤÀº ¶óÀ̺귯¸®³ª Object ÆÄÀÏ)¿¡¼, ¸ðµç non-static ÇÔ¼ö´Â ÀÌÁø ÆÄÀÏ¿¡¼ symbol·Î Ç¥ÇöµË´Ï´Ù. ÀÌ·¯ÇÑ symbolµéÀº ÇÁ·Î±×·¥(ȤÀº ¶óÀ̺귯¸®³ª Object ÆÄÀÏ)¿¡¼, À¯ÀÏÇÏ°Ô ÇÔ¼ö¸¦ È®ÀÎÇÏ´Â, Ư¼öÇÑ ¹®ÀÚ¿ÀÔ´Ï´Ù. C¿¡¼´Â, symbolÀÇ À̸§Àº ÇÔ¼öÀÇ À̸§°ú µ¿ÀÏÇÕ´Ï´Ù.
C++Àº ¿À¹ö·ÎµùÀ» Çã¿ëÇϰí (°°Àº À̸§À» °¡ÁöÁö¸¸ ÀÎÀÚ°¡ ´Ù¸¥ ÇÔ¼ö¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù),
C°¡ °¡Áö°í ÀÖÁö ¾ÊÀº ¿©·¯°¡Áö Ư¡µé — Class, member function, exception specifications —
À» °¡Áö°í Àֱ⠶§¹®¿¡, ±×³É ´Ü¼øÈ÷ ÇÔ¼ö À̸§À» symbol À̸§À¸·Î ¾µ ¼ö´Â ¾ø½À´Ï´Ù.
ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ, C++¿¡¼´Â name mangling(À̸§ ¾û¸ÁÀ¸·Î ¸¸µé±â)À̶ó´Â °ÍÀ» »ç¿ëÇÕ´Ï´Ù.
À̰ÍÀº ÇÔ¼öÀ̸§°ú ¸ðµç ÇÊ¿äÇÑ Á¤º¸ ¸ðµÎ¸¦(ÀÎÀÚÀÇ Å©±â³ª °¹¼ö¿Í °°Àº) ÄÄÆÄÀÏ·¯¸¸ÀÌ ¾Ë¾Æº¼ ¼ö ÀÖ´Â
ÀÌ»óÇÑ ¹®ÀÚ¿·Î ¹Ù²ã¹ö¸³´Ï´Ù.
¿¹¸¦ µé¾î name mangling°ú °ü·ÃÇÏ¿© »ý±â´Â ¹®Á¦Á¡ÀÇ Çϳª´Â C++ Ç¥ÁØ (ÇöÀç´Â [ISO14882])ÀÌ
±× ¹æ¹ýÀ» Á¤ÀÇÇØ ³õÁö ¾Ê¾Ò´Ù´Â Á¡ÀÔ´Ï´Ù. À̰ÍÀº ¸ðµç ÄÄÆÄÀÏ·¯µé¸¶´Ù Àڱ⸸ÀÇ ¹æ¹ý
À¸·Î name manglingÀ» ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ¾î¶² ÄÄÆÄÀÏ·¯´Â name mangling ¾Ë°í¸®ÁòÀÌ ¹öÀü¿¡ µû¶ó
´Ù¸£±âµµ ÇÕ´Ï´Ù. (g++ 2.x ¿Í 3.x¿¡¼ ¶Ñ·ÇÇÏ°Ô µå·¯³³´Ï´Ù.) ºñ·Ï
´ç½ÅÀÌ Æ¯Á¤ÇÑ ÄÄÆÄÀÏ·¯°¡ ¾î¶»°Ô À̸§À» ¹Ù²Ù´ÂÁö ÀÌÇØÇß´Ù°í ÇØµµ(±×·¡¼ 2.2. Classes 3. ÇØ°á ¹æ¹ý3.1. extern "C"C++¿¡´Â extern "C"¶ó´Â, C bindingÀ¸·Î ÇÔ¼ö¸¦ Á¤ÀÇÇϴ Ưº°ÇÑ Å°¿öµå°¡ ÀÖ½À´Ï´Ù. extern "C"·Î¼ ¼±¾ðµÈ ÇÔ¼ö´Â Có·³ ÇÔ¼öÀÇ À̸§À» symbolÀÇ À̸§À¸·Î »ç¿ëÇÕ´Ï´Ù. ÀÌ·¯ÇÑ ÀÌÀ¯·Î, ¸â¹öÇÔ¼ö°¡ ¾Æ´Ñ ÇÔ¼öµé¸¸ÀÌ extern "C"·Î¼ ¼±¾ðµÉ ¼ö ÀÖ°í, ÀÌ·¯ÇÑ ÇÔ¼öµéÀº ¿À¹ö·ÎµùÀ» ÇÒ ¼ö ¾ø½À´Ï´Ù. ÀÌ·± ½ÉÇÑ Á¦ÇÑÀÌ ÀÖÁö¸¸, extern "C"ÇÔ¼ö´Â C ÇÔ¼öó·³
À̰ÍÀº extern "C"·Î ¼±¾ðµÈ ÇÔ¼ö°¡ C++ Äڵ带 Æ÷ÇÔÇÒ ¼ö ¾ø´Ù´Â °ÍÀ» ÀǹÌÇÏ´Â °ÍÀ̾ƴմϴÙ. ÀÌ·± ÇÔ¼ö´Â ¾î´À Á¾·ùÀÇ ÀÎÀÚ¶óµµ ¹ÞÀ» ¼ö ÀÖ°í, C++ÀÇ Æ¯Â¡À» ¾µ ¼ö ÀÖ½À´Ï´Ù. 3.2. ÇÔ¼ö¸¦ ÀûÀçÇÏ´Â ¹ýC++¿¡¼ ÇÔ¼ö´Â 예 1. ÇÔ¼ö¸¦ ÀûÀçÇϱâ main.cpp:
hello.cpp:
3.3. Ŭ·¡½º¸¦ ÀûÀçÇÏ´Â ¹ýŬ·¡½º¸¦ ÀûÀçÇÏ´Â °ÍÀº Á» ´õ ¾î·Æ½À´Ï´Ù. ¿Ö³ÄÇÏ¸é ¿ì¸®´Â Ŭ·¡½ºÀÇÀνºÅϽº¸¦ ÇÊ¿ä·Î ÇÏÁö, ÇÔ¼ö¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ ÇÊ¿ä·Î ÇÏ´Â°Ô ¾Æ´Ï±â ¶§¹®ÀÔ´Ï´Ù. Ŭ·¡½º°¡ ½ÇÇàÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖÁö ¾ÊÀºµ¥´Ù°¡,(¸î¸î »óȲ¿¡¼´Â) Ŭ·¡½ºÀÇ À̸§Á¶Â÷µµ ¾Ë ¼ö ¾ø±â ¶§¹®¿¡, ¿ì¸®´Â new ¸¦ ÀÌ¿ëÇÏ¿© Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ »ý¼ºÇÒ ¼ö ¾ø½À´Ï´Ù. À̰ÍÀº ´ÙÇü¼º(polymorphism) À» ÅëÇØ ÇØ°áÇÒ ¼ö ÀÖ½À´Ï´Ù. ¿ì¸®´Â ±â¹Ý Ŭ·¡½º, °¡»óÀÇ ¸â¹ö¸¦ °¡Áö°í ÀÖ´Â ÀÎÅÍÆäÀ̽ºÅ¬·¡½º¸¦ ½ÇÇàÆÄÀϳ»¿¡ ¼±¾ðÇϰí, ½ÇÁ¦ ±¸ÇöºÎÀÇ Å¬·¡½º¸¦ ¸ðµâ ¿¡ ¼±¾ðÇÕ´Ï´Ù. ÀϹÝÀûÀ¸·Î ÀÎÅÍÆäÀ̽º Ŭ·¡½º´Â Ãß»óÀûÀÔ´Ï´Ù. (Ŭ·¡½º°¡ ¼ø¼ö°¡»óÇÔ¼ö(pure virtual function)À» °¡Áö°í ÀÖÀ»¶§ Ŭ·¡½º°¡ Ãß»óÀûÀ̶ó°í ÇÕ´Ï´Ù.) Ŭ·¡½ºÀÇ µ¿ÀûÀÎ ÀûÀç´Â ÀϹÝÀûÀ¸·Î Ç÷¯±×ÀÎ — ¸íÈ®ÇÏ°Ô Á¤ÀÇµÈ ÀÎÅÍÆäÀ̽º¸¦ º¸¿©ÁÖ¾î¾ß ÇÏ´Â — ¿¡ ¾²À̱⠶§¹®¿¡, ¿ì¸®´Â ¾î·°Å³ª ÀÎÅÍÆäÀ̽º Ŭ·¡½º¿Í °Å±â¼ ÆÄ»ýµÈ ±¸ÇöºÎ Ŭ·¡½º¸¦ Á¤ÀÇÇØ¾ß ÇÕ´Ï´Ù. ´ÙÀ½À¸·Î,¸ðµâ ¾È¿¡Class factory functionÀ̶ó´Â µÎ°³ÀÇ µµ¿òÀ» ÁÖ´Â ÇÔ¼ö¸¦ Ãß°¡·Î ¼±¾ðÇØ¾ß ÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö Áß Çϳª´Â Ŭ·¡½ºÀÇ ÀνºÅϽº¸¦ ¸¸µé°í ±×°ÍÀÇ Æ÷ÀÎÅ͸¦ ¹ÝȯÇÏ´Â ¿ªÇÒÀ» Çϰí, ¶Ç ´Ù¸¥ ÇϳªÀÇ ÇÔ¼ö´Â factory¿¡¼ ¸¸µé¾îÁø ÇÔ¼öÀÇ Æ÷ÀÎÅ͸¦ ¹Þ¾Æ ±×°Í(Ŭ·¡½ºÀÇ ÀνºÅϽº)¸¦ ÆÄ±«ÇÏ´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù. ÀÌ µÎ ÇÔ¼ö´Â extern "C"ÀÇ ÀÚ°ÝÀ» °¡Áö°í ÀÖ¾î¾ß ÇÕ´Ï´Ù. Ŭ·¡½º¸¦ ¸ðµâ¿¡¼ ¾²±â À§Çؼ,µÎ°³ÀÇ factory functionÀ»
¿ì¸®°¡ helloÇÔ¼ö¸¦ ÀûÀçÇß´ø
°Íó·³ 예 2. Ŭ·¡½º¸¦ ÀûÀçÇÏ´Â ¹ý ¿©±â¼ ¿ì¸®´Â ÀϹÝÀûÀÎ main.cpp:
polygon.hpp:
triangle.cpp:
Ŭ·¡½º¸¦ ÀûÀçÇÒ¶§ ÁÖÀÇÇØ¾ß ÇÒ Á¡ÀÌ ¸î°¡Áö ÀÖ½À´Ï´Ù:
4. See Also
서지사항ISO14482 ISO/IEC 14482-1998 — The C++ Programming Language. http://webstore.ansi.org/¿¡¼ PDF·Î À̿밡´ÉÇÕ´Ï´Ù. |
You will receive a legacy which will place you above want. |
||||||||||||||||||||||||||||||||||||||||









