2. ¹®Á¦

ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ¶§, ¶óÀ̺귯¸®¸¦ ÀûÀçÇØ¾ß ÇÒ ¶§°¡ °¡²û¾¿ ÀÖÀ» °ÍÀÔ´Ï´Ù. ´ç½ÅÀÌ ÇÁ·Î±×·¥¿¡ µé¾î°¡´Â Ç÷¯±×ÀÎÀ̳ª ¸ðµâÀ» ¸¸µé°í ÀÖÀ»¶§ ÀÌ·¯ÇÑ ÀÏÀº Á¾Á¾ ¹ß»ýÇÕ´Ï´Ù.

C¾ð¾î¿¡¼­, µ¿ÀûÀ¸·Î ¶óÀ̺귯¸®¸¦ ÀûÀçÇÏ´Â °ÍÀº ¸Å¿ì °£´ÜÇÕ´Ï´Ù. (dlopen, dlsym ±×¸®°í dlclose¸¦ È£ÃâÇÏ´Â °Í¸¸À¸·Î ÃæºÐÇÕ´Ï´Ù) C++¿¡¼­´Â ¾à°£ ´õ º¹ÀâÇÕ´Ï´Ù. C++ ¶óÀ̺귯¸®¸¦ µ¿ÀûÀ¸·Î ÀûÀçÇÏ´Â °ÍÀÌ ¾î·Á¿î ÀÌÀ¯Áß¿¡ ÀϺκÐÀºname mangling ¶§¹®À̰í, ÀϺκÐÀº dlopen API°¡ C¸¦ ¿°µÎ¿¡ µÎ°í ¸¸µé¾îÁ³±â ¶§¹®¿¡ class¸¦ ÀûÀçÇÏ´Â Àû´çÇÑ ¹æ¹ýÀ» Á¦°øÇÏÁö ¸øÇϱ⠶§¹®ÀÔ´Ï´Ù.

C++¿¡¼­ ¶óÀ̺귯¸®¸¦ ÀûÀçÇÏ´Â ¹æ¹ý¿¡ ´ëÇØ ¼³¸íÇϱâ Àü¿¡, name mangling¿¡ ´ëÇØ¼­ ÀÚ¼¼È÷ »ìÆìº¸°í, ¹®Á¦¸¦ ºÐ¼®ÇØ º¾½Ã´Ù. ºñ·Ï ´ç½ÅÀÌ name mangling¿¡ °ü½ÉÀÌ ¾ø´õ¶óµµ, ³ª´Â ´ç½ÅÀÌ ±×°Í¿¡ ´ëÇÑ ¼³¸íÀ» Àб⸦ ¹Ù¶ø´Ï´Ù. ¿Ö³ÄÇÏ¸é ±×°ÍÀº ´ç½ÅÀÌ ¿Ö ¹®Á¦°¡ ¹ß»ýÇÏ°í ¾î¶»°³ ÇØ°áÇØ¾ß ÇÏ´ÂÁö¸¦ ÀÌÇØÇϴµ¥ µµ¿òÀ» Áֱ⠶§¹®ÀÔ´Ï´Ù.

2.1. Name Mangling

¸ðµç C++ÇÁ·Î±×·¥(ȤÀº ¶óÀ̺귯¸®³ª Object ÆÄÀÏ)¿¡¼­, ¸ðµç non-static ÇÔ¼ö´Â ÀÌÁø ÆÄÀÏ¿¡¼­ symbol·Î Ç¥ÇöµË´Ï´Ù. ÀÌ·¯ÇÑ symbolµéÀº ÇÁ·Î±×·¥(ȤÀº ¶óÀ̺귯¸®³ª Object ÆÄÀÏ)¿¡¼­, À¯ÀÏÇÏ°Ô ÇÔ¼ö¸¦ È®ÀÎÇÏ´Â, Ư¼öÇÑ ¹®ÀÚ¿­ÀÔ´Ï´Ù.

C¿¡¼­´Â, symbolÀÇ À̸§Àº ÇÔ¼öÀÇ À̸§°ú µ¿ÀÏÇÕ´Ï´Ù. strcpyÀÇ symbolÀº strcpyÀÔ´Ï´Ù. C¿¡¼­´Â µÎ°³ÀÇ non-static ÇÔ¼ö°¡ °°Àº À̸§À» °¡Áú ¼ö ¾ø±â ¶§¹®¿¡ À̰ÍÀÌ °¡´ÉÇÕ´Ï´Ù.

C++Àº ¿À¹ö·ÎµùÀ» Çã¿ëÇϰí (°°Àº À̸§À» °¡ÁöÁö¸¸ ÀÎÀÚ°¡ ´Ù¸¥ ÇÔ¼ö¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ´Ù), C°¡ °¡Áö°í ÀÖÁö ¾ÊÀº ¿©·¯°¡Áö Ư¡µé — Class, member function, exception specifications — À» °¡Áö°í Àֱ⠶§¹®¿¡, ±×³É ´Ü¼øÈ÷ ÇÔ¼ö À̸§À» symbol À̸§À¸·Î ¾µ ¼ö´Â ¾ø½À´Ï´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ­, C++¿¡¼­´Â name mangling(À̸§ ¾û¸ÁÀ¸·Î ¸¸µé±â)À̶ó´Â °ÍÀ» »ç¿ëÇÕ´Ï´Ù. À̰ÍÀº ÇÔ¼öÀ̸§°ú ¸ðµç ÇÊ¿äÇÑ Á¤º¸ ¸ðµÎ¸¦(ÀÎÀÚÀÇ Å©±â³ª °¹¼ö¿Í °°Àº) ÄÄÆÄÀÏ·¯¸¸ÀÌ ¾Ë¾Æº¼ ¼ö ÀÖ´Â ÀÌ»óÇÑ ¹®ÀÚ¿­·Î ¹Ù²ã¹ö¸³´Ï´Ù. ¿¹¸¦ µé¾î foo¶ó´Â ÇÔ¼ö°¡ ÀÖ´Ù¸é, name mangling¿¡ ÀÇÇØ foo@4%6^·Î ¹Ù²ð °ÍÀÔ´Ï´Ù.

name mangling°ú °ü·ÃÇÏ¿© »ý±â´Â ¹®Á¦Á¡ÀÇ Çϳª´Â C++ Ç¥ÁØ (ÇöÀç´Â [ISO14882])ÀÌ ±× ¹æ¹ýÀ» Á¤ÀÇÇØ ³õÁö ¾Ê¾Ò´Ù´Â Á¡ÀÔ´Ï´Ù. À̰ÍÀº ¸ðµç ÄÄÆÄÀÏ·¯µé¸¶´Ù Àڱ⸸ÀÇ ¹æ¹ý À¸·Î name manglingÀ» ÇÑ´Ù´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. ¾î¶² ÄÄÆÄÀÏ·¯´Â name mangling ¾Ë°í¸®ÁòÀÌ ¹öÀü¿¡ µû¶ó ´Ù¸£±âµµ ÇÕ´Ï´Ù. (g++ 2.x ¿Í 3.x¿¡¼­ ¶Ñ·ÇÇÏ°Ô µå·¯³³´Ï´Ù.) ºñ·Ï ´ç½ÅÀÌ Æ¯Á¤ÇÑ ÄÄÆÄÀÏ·¯°¡ ¾î¶»°Ô À̸§À» ¹Ù²Ù´ÂÁö ÀÌÇØÇß´Ù°í ÇØµµ(±×·¡¼­ dlsymÀ» ÅëÇØ ±× ÇÔ¼ö¸¦ ÀûÀçÇÒ ¼ö ÀÖ°Ô µÈ´Ù°í ÇØµµ), ±×°ÍÀº ¾Æ¸¶ ±× ƯÁ¤ÇÑ ÄÄÆÄÀÏ·¯¿¡¼­¸¸ È¿°ú°¡ ÀÖÀ» °ÍÀ̰í, ´ÙÀ½ ¹öÀüÀÇ ÄÄÆÄÀÏ·¯¿¡¼­´Â ÀÌ¹Ì »ç¿ëÇÒ ¼ö ¾øÀ»Áöµµ ¸ð¸¨´Ï´Ù.

2.2. Classes

dlopen API ÀÇ ¶Ç´Ù¸¥ ¹®Á¦´Â, À̵éÀÌÇÔ¼ö¸¦ ÀûÀçÇÏ´Â °Í¸¸À» Áö¿øÇϰí ÀÖ´Ù´Â Á¡ÀÔ´Ï´Ù. ÇÏÁö¸¸ C++¿¡¼­´Â ¶óÀ̺귯¸®°¡ Á¾Á¾ ´ç½ÅÀÌ ÇÁ·Î±×·¥¿¡¼­ ¾²°íÀÚ ÇÏ´Â Class¸¦ ³ëÃâ½Ã۰í´Â ÇÕ´Ï´Ù. ºÐ¸íÈ÷, Ŭ·¡½º¸¦ »ç¿ëÇϱâ À§Çؼ­ ´ç½ÅÀº ±×°ÍÀÇ ÀνºÅϽº¸¦ ¸¸µé¾î¾ß ÇÏÁö¸¸, ±×°ÍÀº ½±Áö ¾Ê½À´Ï´Ù.