nm(1)¸í·ÉÀº ÁÖ¾îÁø ¶óÀ̺귯¸®ÀÇ ½Éº¼ÀÇ ¸®½ºÆ®¸¦ º¸°íÇÑ´Ù. À̰ÍÀº Á¤Àû, °øÀ¯ ¶óÀ̺귯¸®¿¡¼ ¸ðµÎ µ¿ÀÛÇÑ´Ù. ÁÖ¾îÁø ¶óÀ̺귯¸®¿¡¼, nm(1)Àº Á¤ÀÇµÈ ½Éº¼ÀÇ À̸§, °¢°¢ÀÇ ½Éº¼ÀÇ °ª, ½Éº¼ÀÇ Å¸ÀÔÀ» ³ª¿ÇÑ´Ù. À̰ÍÀº ¶ÇÇÑ ¶óÀ̺귯¸®¿¡¼ °¡´ÉÇÏ´Ù¸é(-l¿É¼ÇÀ» º¸¶ó), ½Éº¼ÀÌ ¼Ò½ºÄÚµåÀÇ ¾îµð¿¡¼ Á¤ÀǵǾú´ÂÁö ¾Ë·ÁÁØ´Ù(ÆÄÀÏÀ̸§°ú ÁÙ ¹øÈ£¸¦ Ç¥½ÃÇÔÀ¸·Î¼).
½Éº¼Å¸ÀÔÀº ´õ ¸¹Àº ¼³¸íÀ» ¿ä±¸ÇÑ´Ù. ŸÀÔÀº ÇѱÛÀڷνá Ç¥½ÃµÈ´Ù; ¼Ò¹®Àڴ ŸÀÔÀÌ Áö¿ªÀûÀ̶ó´Â °ÍÀ̰í, ´ë¹®Àڴ ŸÀÔÀÌ Àü¿ªÀû(¿ÜºÎÀû)À̶ó´Â °ÍÀ» ÀǹÌÇÑ´Ù. º¸ÅëÀÇ ½Éº¼Å¸ÀÔµéÀº ´ÙÀ½°ú °°´Ù. T (Äڵ弽¼Ç¿¡¼ º¸ÅëÀÇ Á¤ÀÇ), D (ÃʱâÈ µ¥ÀÌÅÍ ¼½¼Ç), B (ÃʱâȵÇÁö ¾ÊÀº µ¥ÀÌÅÍ ¼½¼Ç), U (Á¤ÀǵÇÁö ¾ÊÀ½; ½Éº¼ÀÌ ¶óÀ̺귯¸®¿¡ÀÇÇØ »ç¿ëµÇÁö¸¸ ¶óÀ̺귯¸®¿¡ ÀÇÇØ Á¤ÀǵÇÁö ¾Ê¾Ò´Ù), W (¾àÇÔ; ´Ù¸¥ ¶óÀ̺귯¸®°¡ ÀÌ ½Éº¼À» Á¤ÀÇÇÑ´Ù¸é, ±× Á¤Àǰ¡ ÀÌ Á¤ÀǸ¦ ¿À¹ö¶óÀ̵å ÇÒ ¼ö ÀÖ´Ù).
´ç½ÅÀÌ ÇÔ¼öÀÇ À̸§À» ¾ËÁö¸¸, ¾î¶² ¶óÀ̺귯¸®¿¡¼ Á¤ÀǵÇÀÖ´ÂÁö ±â¾ïÇÏÁö ¸øÇÑ´Ù¸é, grepÀ¸·Î ¶óÀ̺귯¸®¸¦ ãÀ¸¸é¼ nmÀÇ ``-o''¿É¼Ç(°¢°¢ÀÇ ÁÙÀÇ ÆÄÀÏ À̸§À» ¾Õ¿¡ ºÙÀδÙ)À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. bash¿¡¼ ´ç½ÅÀº /lib, /usr/lib¿Í /usr/lib, /usr/local/libÀÇ ÇϺΠµð·ºÅ丮¿¡¼ ``cos''¸¦ ´ÙÀ½°ú °°ÀÌ Ã£À» ¼ö ÀÖ´Ù.
nm -o /lib/* /usr/lib/* /usr/lib/*/* \ /usr/local/lib/* 2> /dev/null | grep 'cos$' |
nm¿¡ ´ëÇØ ´õ ¸¹Àº °ÍÀ» ¾Ë°í ½ÍÀ¸¸é info:binutils#nm¿¡ ``Á¤º¸'' ¹®¼°¡ ÀÖµû.
µÎ°³ÀÇ Æ¯º°ÇÑ ÇÔ¼ö°¡ ÃʱâÈ¿Í Á¾°áÈÀÇ ¸ðµÑÀ» µ½´Â´Ù:_init¿Í _fini. ``_init''ÇÔ¼ö°¡ ¶óÀ̺귯¸®¿¡ ÀÇÇØ ³»º¸³»Áø´Ù¸é, ¶óÀ̺귯¸®°¡ óÀ½¿¡ ¿¾îÁú¶§ ºÒ¸±°ÍÀÌ´Ù(dlopen()À̳ª °øÀ¯¶óÀ̺귯¸®ÀÇ ÇüÅ·Î). C ÇÁ·Î±×·¥¿¡¼, À̰ÍÀº ´ç½ÅÀÌ _initÀ̶õ À̸§ÀÌ ºÙÀº ¾î¶² ÇÔ¼ö¸¦ Á¤ÀÇÇß´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. À̰Ϳ¡ ´ëÇÑ _finiÇÔ¼ö°¡ Àִµ¥, À̰ÍÀº Ŭ¶óÀÌ¾ðÆ®°¡ ¶óÀ̺귯¸® »ç¿ëÀ» ³¡³¾¶§ ºÒ¸®´Â ÇÔ¼öÀÌ´Ù(0³ª ÇÁ·Î±×·¥ÀÇ Á¤»óÁ¾·á¸¦ °¡Á®¿À´Â dlclose()ÀÇ ÇüÅ·Î). ÀÌ ÇÔ¼öÀÇ C ÇÁ·ÎÅäŸÀÔÀº ´ÙÀ½°ú °°´Ù:
void _init(void); void _fini(void); |
``.o''ÆÄÀÏÀ» gcc¿¡¼ ÄÄÆÄÀÏ ÇÒ ¶§, ``-nostartfiles''¿É¼ÇÀ» ³Ö¾î¶ó. À̰ÍÀº CÄÄÆÄÀÏ·¯°¡ .soÆÄÀÏ¿¡ ´ëÇØ ½Ã½ºÅÛ ½ÃÀÛ ¶óÀ̺귯¸®¸¦ ¸µÅ©Çϵµ·Ï ÇØÁØ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ´ç½ÅÀº ``multiple=definition''¿¡·¯¸¦ ¸¸³¯ °ÍÀÌ´Ù. Jim Mischel°ú Tim GentryÀÌ _init, _finiÇÔ¼ö¿¡ ´ëÇÑ ³íÀÇ¿¡¼ ±ÛÀ» ¾²´Âµ¥ µµ¿òÀ» ÁáÀ» »Ó¸¸ ¾Æ´Ï¶ó ÀÌ·± Á¦¾ÈÀ» ÇØÁذͿ¡ ÀÇÇØ °¨»çÇÑ´Ù.
GNU ·Î´õ°¡ Ưº°ÇÑ ½ºÅ©¸³Æ® ¾ð¾î¸¦ ÅëÇØ º¸ÅëÀÇ ¶óÀ̺귯¸® Çü½Ä´ë½Å ÅØ½ºÆ® ÆÄÀÏÀÇ ÇüÅ·Π°øÀ¯ ¶óÀ̺귯¸®¸¦ À¯ÁöÇÏ°Ô Çϴ°ÍÀº Àǹ̰¡ ¾ø´Ù. À̰ÍÀº °£Á¢ÀûÀ¸·Î ´Ù¸¥ ¶óÀ̺귯¸®¸¦ ÇÕÄ¡°Ô µÊÀ¸·Î¼ À¯¿ëÇÏ´Ù. ¿¹¸¦µé¾î, ³ªÀÇ ½Ã½ºÅÛÁß Çϳª¿¡¼ µ¹¾Æ°¡´Â /usr/lib/libc.soÀÇ ¸®½ºÆ®°¡ ÀÖ´Ù:
/* GNU ld script Use the shared library, but some functions are only in the static library, so try that secondarily. */ GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a ) |
À̰Ϳ¡ ´ëÇØ ´õ ¸¹Àº Á¤º¸¸¦ ¾ò±âÀ§ÇØ ld¸µÄ¿ ½ºÅ©¸³Æ®¸¦ º¸¾Æ¶ó(ld¸í·É¾î). ÀϹÝÀûÀÎ Á¤º¸´Â info:ld#Options¿Í info:ld#Commands¿¡¼ ¾òÀ»¼ö ÀÖ°í, info:ld#Option Commands¿¡¼ ¸í·É¾îÀÇ Á¤º¸¸¦ ¾òÀ»¼ö ÀÖ´Ù.
¸¸¾à ´ç½ÅÀÌ ´Ù¸¥ ¸¹Àº ½Ã½ºÅÛ¿¡ Æ÷ÆÃÇÒ ÀÀ¿ëÇÁ·Î±×·¥À» Á¦ÀÛÇÑ´Ù¸é, ´ç½ÅÀº ¶óÀ̺귯¸®¸¦ ¸¸µé°í ¼³Ä¡Çϱâ À§ÇØ GNU libtool¸¦ »ç¿ëÇϴ°ÍÀ» °í·ÁÇØ¾ß ÇÒ °ÍÀÌ´Ù. GNU libtoolÀº ½ºÅ©¸³Æ®¸¦ Áö¿øÇÏ´Â ÀϹÝÀûÀÎ ¶óÀ̺귯¸®ÀÌ´Ù. LibtoolÀº ÀϰüÀûÀÌ°í Æ÷ÆÃ°¡´ÉÇÑ ÀÎÅÍÆäÀ̽º¼Ó¿¡ °øÀ¯¶óÀ̺귯¸®ÀÇ º¹Àâµµ¸¦ ÁÙ¿©ÁØ´Ù. LibtoolÀº ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ¸¸µé°í, (Á¤Àû, °øÀ¯)¶óÀ̺귯¸®¸¦ ¸µÅ©Çϰí, ½ÇÇàÆÄÀÏÀ» ¸µÅ©Çϰí, ½ÇÇàÆÄÀÏÀ» µð¹ö±×Çϰí, ¶óÀ̺귯¸®¸¦ ¼³Ä¡Çϰí, ½ÇÇàÆÄÀÏÀ» ¼³Ä¡Çϴµ¥ Æ÷ÆÃ°¡´ÉÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÑ´Ù. À̰ÍÀº ¶ÇÇÑ libltdlÀ» Æ÷ÇÔÇϴµ¥, µ¿Àû ÀûÀç ÇÁ·Î±×·¥ÀÇ Æ÷ÆÃ°¡´ÉÇÑ °¨½Î´Â ¿ªÇÒÀ» ÇÑ´Ù. ´õ ¸¹Àº Á¤º¸¸¦ À§Çؼ http://www.gnu.org/software/libtool/manual.htmlÀÇ ¹®¼¸¦ Âü°íÇ϶ó.
»ý¼ºµÈ ÆÄÀÏ¿¡ Æ÷ÇԵǴ ¸ðµç ½Éº¼Àº µð¹ö±ë¿¡ À¯¿ëÇÏÁö¸¸, ³Ê¹« ¸¹Àº °ø°£À» Â÷ÁöÇÑ´Ù. ¸¸¾à °ø°£ÀÌ ÇÊ¿äÇÏ´Ù¸é, ±×°ÍµéÀÇ ÀϺθ¦ Áö¿ö¶ó.
ÃÖ¼±ÀÇ Á¢±Ù¹ýÀº ¿ÀºêÁ§Æ® ÆÄÀÏÀ» Á¤»óÀûÀ¸·Î »ý¼ºÇϰí, µð¹ö±ë°ú °Ë»ç¸¦ ¸ÕÀúÇÑ´Ù(À̰͵éÀ» °¡Áö°í µð¹ö±ë, °Ë»ç¸¦ Çϴ°ÍÀº ¸Å¿ì ÆíÇÏ´Ù). ±×¸®°í³ª¼, ÇÁ·Î±×·¥À» ¿ÏÀüÈ÷ °Ë»çÇßÀ¸¸é, strip(1)À» »ç¿ëÇØ¼ ½Éº¼µéÀ» Áö¿ö¶ó. strip(1) ¸í·ÉÀº ½Éº¼À» Áö¿ì´Âµ¥ ¸¹ÀÌ Æí¸®ÇÏ°Ô ÇØÁØ´Ù; ÀÚ¼¼ÇѰÍÀº ±×°ÍÀÇ ¹®¼¸¦ ÂüÁ¶Ç϶ó.
´Ù¸¥, GNU ld¿é¼ÇÀÇ ´Ù¸¥ °ÍÀ¸·Î´Â ``-S''¿Í ``-s''°¡ ÀÖ´Ù; ``-S''´Â Ãâ·ÂÆÄÀÏ¿¡¼ (¸ðµç ½Éº¼À̾ƴÑ)µð¹ö°Å ½Éº¼ Á¤º¸¸¦ ºü¶ß¸°´Ù. ``-s''¿É¼ÇÀº Ãâ·ÂÆÄÀÏ¿¡ ¸ðµç ½Éº¼ Á¤º¸¸¦ ½á ³Ö´Â´Ù. ``-Wl, -S''¿Í ''-Wl,-s''·Î¼ gcc¸¦ ÅëÇØ ÀÌ ¿É¼ÇÀ» ¾µ ¼ö ÀÖ´Ù. ´ç½ÅÀÌ Ç×»ó ½Éº¼À» Á¦°ÅÇϰí, ÀÌ ¿É¼ÇÀÌ ºÒÇÊ¿äÇѰÍÀ̶ó¸é, ±×³É ÆíÇÏ°Ô ´À²¸¶ó. ÇÏÁö¸¸, À̰ÍÀº ´ú À¯¿¬ÇÑ ¹æ¹ýÀÏ °ÍÀÌ´Ù.
´ç½ÅÀº Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux¹®¼°¡ À¯¿ëÇÏ´Ù´Â °ÍÀ» ¾Ë°ÍÀÌ´Ù. À̰ÍÀº ¸Å¿ìÀÛÀº ÇÁ·Î±×·¥µéÀÌ ¾î¶»°Ô ¸¸µå´ÂÁö ¼³¸íÇÑ´Ù. »ç½Ç, ÀϹÝÀûÀÎ »óȲ¿¡¼ ÀÌ·± Æ®¸¯À» »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø´Ù. ÇÏÁö¸¸ À̰ÍÀº ELF°¡ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö º¸¿©ÁÖ´Â ÁÁÀº¿¹ÀÌ´Ù.
KDE °³¹ßÀÚ´Â ¸¹ÀÌ Àç ¹èÄ¡¸¦ ÇØ¾ßÇϰԶ§¹®¿¡ Å« GUI C++ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇϴµ¥ ¿À·¡°É¸°´Ù´Â °ÍÀ» ¾È´Ù. À̰Ϳ¡ ¿©·¯°¡Áö ÇØ°áÃ¥ÀÌ ÀÖ´Ù. ´õ ¸¹Àº Á¤º¸¸¦ À§ÇØ Making C++ ready for the desktop (by Waldo Bastian)¸¦ Âü°íÇ϶ó.