  The Linux GCC HOWTO
  Daniel Barlow <daniel.barlow@linux.org> 
  v1.17, 28 February 1996
  ͺ <nakano@apm.seikei.ac.jp> 
  v1.17j2, 29 January 1997 

  ʸǤ linux β GNU C ѥȥѥɬפʥ饤֥
  ꤹˡˤĤƵƤޤޤδĶѤץ
  Υѥ롢󥯡¹ԤӥǥХåˤĤƤ⳵פҤ٤ޤ
  ʸƤ¿ Mitch D'Souza  GCC-FAQ ΤǤꡢ
  ʸ GCC-FAQ ȤʤΤǤޤ ELF-HOWTO ¿
  ѤƤꡢƱʸ ELF-HOWTO ʬ֤Τ
  Daniel  ELF-HOWTO ԤǤ⤢ޤϤǤϸ
  ꡼ȤƤϺǽΤΤˤʤޤʥСֹ椫Ϥϸʤ
  ⤷ޤ󤬡 RCS ưŪˤĤƤΤʤǤˡ
  ۤԤƤޤ

  1.  Ϥ

  1.1.  ELF  a.out

   Linux ˤץ೫ȯĶϤɤɤѲƤޤ Linux
  Ǽ¹ԤǤХʥˤηߤꡢƥˤäƤ
  Ȥʬ뤳Ȥޤ HOWTO ɤˡɼԤΥƥ
  ϤɤȤäƤ뤫Ĵ٤ƤɤǤ礦

  ơɤФ狼Ǥ礦 `file' ޥɤȤǤ
  file /bin/bash Τ褦ˤޤˡELF μ¹ԥեʤELF Ȥ
  ʸ󤬥åˤޤ a.out μ¹ԥեʤ
  Linux/i386פȤʸޤɽФޤ

  ELF  a.out ΰ㤤ˤĤƤϤʸθۤɤʬǾܺ٤˲⤷
   ELF եޥåȤǤꡢ̤ˤϤɤΤȤ
  ޤ

  1.2.  ʸˤĤ

  ʤɤˡŪʷ˴ؤƤϡʸκǸ˼Ƥޤޤ
  Usenet Ǵȴʼ򤷤ꡢХǤʤȤХ𤷤 C 
  ˤĤƤ̵Τ򤵤餷ꡢߤʤ⤭ޤäꤹ뤳Ȥ˴
  ˡŪʷٹ⼨Ƥޤ

  ǤΤϾ̤Ǥ :-)

  1.3.  եȤˤĤ

  ʸ Posstscriptdvihtml Τɤ줫ǤɤߤϡƥǤ
  ɤǤ꾯¿ΥեȤ򸫤뤳Ȥˤʤޤե̾
  ޥ̾ޥɽϡɤʤɤΰѤ typewriter ե
  Ȥǡ¾ζĴ٤Ƥ emphasized եȤǼޤ

  ʺѰդޤ dvi  Postscript Ǥ index οϾϤ
  ֹǤHTML ǤϿñ˽ФƤ֤ǤåˤäƤ
  Ƥ֤ȤޤƥǤǤˡñʤ׽֤ˤʤä
  ޤޤ¾ηǸƲ

  ˤ Bourne ѤƤޤ C 򤪻Ȥϡ

        $ FOO=bar; export FOO

  ȤʤäƤȤ

        % setenv FOO bar

  ɤѤƲ

  ץץȤ $ Ǥʤ # ѤƤȤǤϡΥޥɤ root 
  ¹Ԥɬפ뤳Ȥ򼨤Ƥޤ󤳤ʸǤ¹Ԥ
  ̤ˤǤϻϤȤޤ󡣹 :-)

  2.  

  2.1.  ʸ

  ʸ Linux HOWTO ꡼ΰĤǤΤǡ Linux HOWTO ֤
  Ȥ㤨 <http://sunsite.unc.edu/pub/linux/docs/HOWTO/> ˤ
  ФɤˤǤ⤢ϤǤ HTML ǡʤ餯¿ǡˤ˾
  Ǥ <http://ftp.linux.org.uk/~barlow/howto/gcc-howto.html> ɤ
  

  2.2.  ¾ʸ

  gcc ˴ؤʸۥʸҡˤ texinfo  *.info
  եȤäƤޤCD-ROM ʬ®ʥͥåȥ
  ѤǤʤ뤤Ͽۥѥå untar
  ŬɬפʤΤ /usr/info ˥ԡǤʾΤ
  ǽϡ tsx-11 <ftp://tsx-11.mit.edu:/pub/linux/packages/GCC/> 
  ⤳ʸǤޤϾ˺ǿǤǤȤϸ¤ޤ
  

  libc ˴ؤ󸻤Ĥޤ GNU libc ˤ info ե뤬°
  Ƥꡢˤ Linux  libc Ƥstdio ơŪ
  ˵ҤƤޤޤ man ڡ
  <ftp://sunsite.unc.edu/pub/Linux/docs/> Υ֤ Linux ˽
  줿Τǡƥॳʥ 2ˤ libc δؿʥ
  3ˤ˴ؤ뵭Ҥ󤢤ޤ

  2.3.  GCC

  Ĥ򤬤ޤ

  1. Linux Ѥ GCC Ǥ˥ХʥʥѥѤߡˤ
     <ftp://tsx-11.mit.edu:/pub/linux/packages/GCC/> ֤Ƥޤ
     ʸ񤤤ƤǤκǿǤ 2.7.2 ǡ
     gcc-2.7.2.bin.tar.gz ȤեǤ

     Ǥ 2.7.2.1 ǿǤǤ

  2. Free Software Foundation  GCC κǿǤ GNU
     archives <ftp://prep.ai.mit.edu/pub/gnu/> ˤޤΥС
     Ͼ˥ХʥۤΤΤƱǤȤϸ¤ޤ󤬡ߤ
     ȤƱ 2.7.2 Ǥ Linux GCC ƥʥ󥹤ƤƤ
     ϡǿСΥѥưפˤ뤿κȤ򤷤Ƥ
     ꡢ configure ץȤǤ٤Ƥ꤬λޤ tsx-11
     <ftp://tsx-11.mit.edu:/pub/linux/packages/GCC/> ˤͭѤʥѥå
     ֤Ƥ뤳ȤޤΤǡåƤޤ礦

  Ūʥɰʳ򥳥ѥ뤹ˤϰʲΤ褦ʤΤɬפˤʤ
  ޤʼ¤ϤۤȤɤνŪʥɤˤɬפǤˡ

  2.4.  C 饤֥ȥإåե

  ɬפˤʤΤϡƥ ELF  a.out ΤɤѤƤ
  뤤ɼԤɤѤˤäѤޤ libc 4  5
  ˥åץǡȤȤ ELF-HOWTO ɤǤ褦ˤƲ
  ʸꤷΤƱȤˤϤǤ

  ʲ˼Τ⺣ޤǤƱ tsx-11
  <ftp://tsx-11.mit.edu:/pub/linux/packages/GCC/> ˤޤ

     libc-5.2.18.bin.tar.gz
        ELF ͭ饤֥Ū󥯥饤֥ꡢ󥯥롼ɥե
         C 饤֥ math 饤֥꤬äƤޤ

     libc-5.2.18.tar.gz
        嵭ΥǤإåեꤹˤ .bin Υѥå
        ɬפǤ C 饤֥ʬǥѥ뤹뤫ХʥȤ
        Ǻफ⤷ޤ󤬡ۤȤɤξϥХʥȤΤ
        Ǥ NYS  shadow password Ѥϼʬǥ饤
        ֥ɬפ뤫⤷ޤ

     libc-4.7.5.bin.tar.gz
        a.out ζͭ饤֥ŪѤΥ饤֥Ǥ С
         4.7.5  C ӴϢΥ饤֥ȤʤäƤޤΥѥ
        Ͼ嵭ΥС 5 饤֥ȶ¸Ǥ褦ˤʤäƤ
        ޤa.out ΥץκѤ򤷤ʤ¤ϤΥѥ
        ɬפޤ

  2.5.  Ϣġas, ld, ar, strings ʤɡ

  ޤǤΤΤƱ tsx-11
  <ftp://tsx-11.mit.edu:/pub/linux/packages/GCC/> ꤷޤߤ
  С binutils-2.6.0.2.bin.tar.gz Ǥ

  κǿǤ 2.7.0.3 Ǥ

   binutils  ELF бΤΤޤ󡣤ޤǿǤ libc 
  ELF ǤΤǡ a.out  libc  ELF  libc Ȱ˻Ȥɬפ
  礦ߤǤ C 饤֥γȯϤۤȤ ELF ١ˤʤäƤƤ
  ޤ顢ä a.out ˤͳʤ¤ ELF Ѥ褦ˤ
  礦

  3.  GCC Υ󥹥ȡ

  3.1.  GCC ΥС

  ѤƤ GCC ΥСϥץץȤ gcc -v 
  뤳ȤǤ狼ޤޤΥޥɤˤäƸߤΥåȥåפ ELF
   a.out 狼ޤΥƥǤϰʲΤ褦ˤʤޤ

        $ gcc -v
        Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
        gcc version 2.7.2

  ϤΤդ٤ɤϰʲΤ褦ʤΤǤ

     i486
         gcc  486 ץå˥ӥɤ줿Ȥ򼨤Ƥޤ
        ɼԤΥƥǤ 386  586 ɽ뤫⤷ޤ󡣤
        ΥƥΤɤ줫ǥѥ뤵줿Хʥ¾ΤɤΥåפǤ
        ¹Ԥ뤳Ȥޤ 486 gcc ǥѥ뤵줿ץ
        Ǥϡ 486 åפǹ®ư褦ʥɤ
        ޤƤޤΤȤˤä 386 Ǥμ¹Իǽͭʱ
        Ф뤳ȤϤޤ󤬡ХʥΥϾ礭ʤ
        

     box
        ϤޤäפǤϤޤǡ¾ΤΤ֤ѤäƤ
        slackware debian ʤɡˤȤ䡢⤽ޤäʤ
        ⤢ޤʤĤޤΤ i486-linux Τ褦ˤʤޤˡ⤷ʬ
        Ȥ gcc ӥɤˤϡͤ򥻥åȤƳʹɤ
        뤳ȤǤޤʻϤƤޤ :-)ˡ

     linux
         linuxelf  linuxaout Ȥʤ뤳Ȥ⤢ꡢݤʤȤ
         gcc ΥСˤäƤΰ̣ѤäƤޤ

     o  linux  2.7.0 ʹߤΥСʤ ELFξ a.out 
        ̣ޤ

     o  linuxaout  a.out бǤΥȥ linux Ƥ 2.7.0
        ʹߤ a.out  ELF ѹ줿ȤˤƳޤ
        ä 2.7.0 ΥСǤϤΥȥ꤬뤳ȤϤ
        ޤ

     o  linuxelf ȤΤϸŤ񼰤Ǥ줬ΤϤۤȤɤξ
        ELF ХʥϤ褦ꤵ줿 2.6.3  gcc ǤȤ
         gcc 2.6.3  ELF ɤˤäƥХ뤳Ȥ
        ƤޤäƤɽ줿ϥåץ졼ɤ
        ᤷޤ

     2.7.2
        СֹǤ

  äƻ ELF ɤϤ 2.7.2 Ǥ gcc ȤäƤ뤳Ȥ
  ʤޤäΤ

  3.2.  󥹥ȡ

  gcc Υ󥹥ȡλˤ褽򤷤Ƥ䡢Хʥѥåΰ
  Ȥ gcc 򥤥󥹥ȡ뤷硢ե륷ƥΤɤõ
  gcc ΤΤꤿȤ뤫⤷ޤ󡣰ʲפʤΤ򼨤
  ޤ

  o  /usr/lib/gcc-lib/target/version/ ȤΥ֥ǥ쥯ȥˤϥѥ
     Τʬ֤ƤޤѥΤΥץȥС
     ͭΥ饤֥ꡢ󥯥롼ɥե뤬ޤ

  o  /usr/bin/gcc ϥѥΥɥ饤ФǤޥɥ饤󤫤Ϥ줬
     ¹ԤޤʣΥСΥѥ餬嵭Τ褦ʥǥ쥯
     ̡˥󥹥ȡ뤵Ƥ硢ΥץǥС
     Ȥʬ뤳ȤޤǥեȤΥСɽˤ gcc
     -v Ȥޤ¾ΥСѤˤ gcc -V version Ȥ
     ʲ򼨤ޤ

        # gcc -v
        Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
        gcc version 2.7.2
        # gcc -V 2.6.3 -v
        Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.6.3/specs
        gcc driver version 2.7.2 executing gcc version 2.6.3

  o  /usr/target/(bin|lib|include)/ʣΥåȥƥ㤨
     a.out  ELF뤤ϳƼΥѥʤɡˤ˱ gcc ʣ
     󥹥ȡ뤷硢Linux ʳΥ饤֥ binutils
     as ld ʤɡˡإåեʤɤϤΥǥ쥯ȥ겼֤
      gcc 󥹥ȡ뤷ƤǤ⡢ޤפˤ
     Ϣե뤬֤櫓Ǥˤʤ
     /usr/(bin|lib|include) ˤޤ

  o  /lib  /usr/lib ʤɤ native ʥƥΤΥ饤֥꤬֤
     ǥ쥯ȥǤѥʳΥץꥱˤϡ
      /lib/cpp ֤뤳ȤꤷƤΤޤä X Ǥ
     Ȥޤˡʤ /usr/lib/gcc-lib/target/version/ 饳
     ԡƤ뤫ܥå󥯤ĥޤ礦

  3.3.  إåե֤

  ѼԳƼ /usr/local/include ˥󥹥ȡ뤹Τȡ Linux
  ǼѤإåեϰʲ 3 Ĥˤʤޤ

  o  /usr/include/ ȤΥ֥ǥ쥯ȥˤإåեΤۤȤ
      H. J. Lu 󶡤Ƥ libc ХʥѥåΤΤǤ֤
     ȤɡפȽ񤤤Τϡ¾ˤ⤳˥إåե֤ѥå
     뤫Ǥ㤨 curses  dbm ʤɤǤŤ libc ѥå
      curses  dbm ⤤äˤʤäƤޤǿΤΤǤ
     ѥåˤʤäƤޤ

  o  /usr/include/linux  /usr/include/asm ǥ쥯ȥΥեʤ
      <linux/*.h> <asm/*.h> Τ褦˥󥯥롼ɤޤˡ
     Υǥ쥯ȥϥͥ륽ĥ꡼Τ linux/include/linux
     ǥ쥯ȥꤪ linux/include/asm ؤΥܥå󥯤Ȥʤä
     ޤʣʥץȯϥ󥹥ȡ뤷Ƥɬ
     פޤϥͥΥѥΤΤΤǤϤʤ
     ΤǤ

     ͥ륽ŸǤϤǡ make config ¹Ԥɬ
     ޤΥޥɤˤäƤϤƺ <autoconf.h> 
     ¿ΥեˤäƻȤƤޤͥΥС
     äƤ asm ǥ쥯ȥ꤬ܥå󥯤ˤʤäƤơ make
     config ΤȤˤΤߥ󥯤褦ˤʤäƤޤ

     äƥͥ륽 /usr/src/linux ʲŸκȤ
     Τ褦ˤʤޤ

        $ cd /usr/src/linux
        $ su
        # make config
        [ޤθ³ƥͥΤǤʤ¤
        Ǥ򵤤ˤɬפϤޤꤢޤ]
        # cd /usr/include
        # ln -s ../src/linux/include/linux .
        # ln -s ../src/linux/include/asm .

  o  <float.h>  <limits.h> <varargs.h> <stdarg.h> <stddef.h> 
     äեϥѥΥСˤäƤѤäƤ
     äƤ /usr/lib/gcc-lib/i486-box-
     linux/2.7.2/include/ 뤤ϻ褦̾ξ֤Ƥ
     

  3.4.  ѥκ

  3.4.1.  Linux Ǽ¹ԤХʥ¾ΥۥȤǥѥ뤹

  gcc ΥɤФ INSTALL եλؼ˽
  ǤϤǤѥԤԥ塼μब XXX Ǥ
  configure --target=i486-linux --host=XXX Ȥ make С٤
  äƤϤǤºݤΥѥˤ Linux ͭΥإå
  ե롢ͥΥإåե뤬ɬפˤʤޤ
  顢󥫤Υ
  <ftp://tsx-11.mit.edu/pub/linux/packages/GCC/> ꤷƤ줾
  ɤɬפޤ

  3.4.2.  MSDOS μ¹ԥХʥ Linux ǥѥ뤹

   "emx" ѥåȤ "go" ƥʤɤȤȲǽˤʤ
  Ǥ <ftp://sunsite.unc.edu/pub/Linux/devel/msdos> 򸫤ƤߤƲ
  

  ϤȤʤΤǡǽˤĤݾڤ뤳ȤϤǤޤ
  

  4.  ܿȥѥ

  4.1.  ư륷ܥ

  긵 gcc Ǥɤʥܥ뤬ưƤ뤫Ĵ٤ˤ -v 
  åĤ gcc ¹ԤޤξϰʲΤ褦ˤʤޤ

        $ echo 'main(){printf("hello world\n");}' | gcc -E -v -
        Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
        gcc version 2.7.2
         /usr/lib/gcc-lib/i486-box-linux/2.7.2/cpp -lang-c -v -undef
        -D__GNUC__=2 -D__GNUC_MINOR__=7 -D__ELF__ -Dunix -Di386 -Dlinux
        -D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__i386
        -D__linux -Asystem(unix) -Asystem(posix) -Acpu(i386)
        -Amachine(i386) -D__i486__ -

  Linux ͭεǽ˰¸ɤ񤤤ƤϤʬʲΤ褦
  ˰ϤäƤɤǤ礦

        #ifdef __linux__
        /* ... funky stuff ... */
        #endif /* linux */

  Ūˤ __linux__ Ѥޤ linux Ѥ٤ǤϤޤ
  Ԥ POSIX ǤϤʤǤ

  4.2.  ѥؤλؼ

  ѥΥå˴ؤʸ gcc  info ˽񤫤Ƥޤ
  Emacs  C-h i Ȥ `gcc' ץӤޤˡ󥹥ȡ
  ѤХʥۥѥåˤäƤϤ줬äƤʤäŤ
  ꤹ뤳Ȥޤξ gcc Υ֤
  <ftp://prep.ai.mit.edu/pub/gnu> ߥ顼Ȥꤷ
  info 򥳥ԡƻȤޤ礦

  gcc  man ڡ gcc.1 ϡǸäƤޤƤŤǤ
  man ڡΤΤǤٹ𤵤Ƥޤ

  4.2.1.  ѥΥե饰

  gcc Υޥɥ饤 -On ĤȽϤ륳ɤŬ뤳
  Ǥޤ n Ǥʾά 1 Ȥߤʤޤˡ̣Τ n
  ͤȤ줾ͤФ¼Ūʸ̤ϥѥΥСˤä
  Ѥޤ̾ 0 ʺŬʤˤ 2ʤˤ뤤 3ʤ
  Ƥ⤿ˤޤǤ̣ޤ

  gcc ǤϤͤ -f  -m ץ󷲤Ÿޤ -O 
  Τ줾Υ٥ˤɤΤ褦ʥץбƤ뤫Ĵ٤
  ˤ gcc  -v  -Q ץĤƼ¹ԤޤʸԤΥץ
  ϥޥ˥奢ˤϺܤäƤޤˡ㤨лξ -O2 ФƤϰʲ
  Τ褦ˤʤޤ

        enabled: -fdefer-pop -fcse-follow-jumps -fcse-skip-blocks
        -fexpensive-optimizations
                 -fthread-jumps -fpeephole -fforce-mem -ffunction-cse -finline
                 -fcaller-saves -fpcc-struct-return -frerun-cse-after-loop
                 -fcommon -fgnu-linker -m80387 -mhard-float -mno-soft-float
                 -mno-386 -m486 -mieee-fp -mfp-ret-in-387

  ȤäƤ륳ѥǤκǤ⤤Ŭ٥⤤ͤꤷ
  㤨 -O6 ʤɡˤưϡǹ٥κŬꤷΤƱ
  ʤޤۤ륳ɤˤΤ褦ʤǺŬꤹΤ
  ɤǥȤϸޤ󡣤⤷꡼륳ѥǹʤ
  ŬƳ줿硢ɤޤưʤʤǽ뤫
  

  gcc 2.7.0  2.7.2 Υ桼ϡǤ -O2 ˤϥХ뤳
  ˵ĤƲŪˤ strength reduction ưʤΤǤ
  gcc ƥѥ뤹ϥѥåƤ뤳ȤˤäƤϲ
  ޤʤϥѥκݤ˾ -fno-strength-reduce 
  ꤹ褦ˤƲ

  4.2.1.1.  ץåͭΥե饰

  -O ץΤɤΥ٥ǤϤޤ󤬡 -m ͭѤʥե饰
  ǤκǤΤ -m386  -m486 ǡ줾 386  486 ͭ
  ɤϤ褦˻ꤷޤΥץꤷƥѥ
  뤷ɤϡ줾¾ΥåפǤưޤ 486 Υɤ礭
  ʤޤ386 ξǤ٤ʤ뤳ȤϤޤ

  ߤϤޤ -mpentium 뤤 -m586 Ȥץ¸ߤޤ
  Linus ˤ -m486 -malign-loops=2 -malign-jumps=2 -malign-
  functions=2 Ȥȥ饤ȤΤ礭ʥåפ뤳Ȥʤ
  486 ΥɤŬǤ뤽ǤPentium ǤϤ⤽⥢饤
  ɬפȤޤˡ Cygnus  Michael Meissner ϤäƤޤ

        ĿŪˤ -mno-strength-reduce  x86 Υɤ˻ꤹ®
        ϸ夹Ȼפstrength reduction ΥХΤȤäƤ
        ǤϤʤȤդ줿Ϥޤ̤äǤˡ x86 CPU
        Ǥϥ쥸­䤹ᡢ gcc ѤƤˡʥ쥸
         spill 쥸Ȥʳإ롼ʬˤ
        Ǥ롣 strength reduction ǤϾ軻û֤ݤˤ
        ¿Υ쥸Ѥ롣 -fcaller-saves Ʊͤǽ㲼
        ˤʤȹͤ롣

        ⤦Ļ丫 -fomit-frame-pointer ͭƯƯ
        ⤢ȻפΥץ¾Υ쥸Ʋǽ
        롣 x86 ̿᥻åȤ᤹ͤơå
        Хɥ쥹ϥե졼Хɥ쥹礭ʥڡɬפȤ
        롣äƥץѤǤ I å夬ʤʤä
        ޤƱͤ -fomit-frame-pointer ꤹȥѥϥ
        åݥ󥿤̿ᥳΤӤ˺֤뤬ե졼ब
        ϥå졼̿ǻȤäƤޤȤˤʤ롣

  κǸϺƤ Linus θդ᤯ޤ礦

        ǹǽˤϻ򿮤㤤ޤ󡣥ƥȤƲ
        gcc ѥˤϤΥץ󤬺ߤꡢȤ߹礻Τ
        ΰĤʤˤȤäƤΥ٥ȤʺŬȤʤϤǤ

  4.2.2.  Internal compiler error: cc1 got fatal signal 11

  ʥ 11  SIGSEGV ޤϡ֥Ȱȿפ̣ޤ̾盧
  ϥץǥݥ󥿤𤷡ץǴƤʤΰ
  ˽񤭹ߤԤȤ̤ǤäƤ gcc ΥХǤ
  ǽ⤢ޤ

   gcc ʤΤۤȤɤʬˤϺޤǥƥȤ줿ꤹ٤ե
  ȸޤ gcc ǤϿ¿ʣʥǡ¤̵Υݥ
  ѤƤޤĤޤ̾ǺǤͥ RAM ΥƥǤ
  ȤΤǤ⤷ХƸʤСʥѥƤӹԤʤ
  ȤƱȤǻߤޤΤǤʤСˤ¿ʬְ㤤ʤȤäƤ
  ϡɥCPUꡢޥܡɤޤϥåˤξ㳲Ǥ
  ƥबŸΥåѥ뤫Ȥäơ뤤 Windows
  ʤư뤫ȤäƤξ㳲ХȸäƤϤޤ󡣤
  Ρإƥȡ٤ϰ̤˲̵ͤȤߤʤƤ뤫ǤȽǤ
  ޤˡޤͥΥѥ뤬Ĥ `make zImage' 
  ߤ뤫ȤäơХȸäƤʤǤ --- 
  Τ˥Х⤷ޤ󤱤ɤ͡ `make zImage' Ϥ餯 200 ʾ
  ե򥳥ѥ뤷ޤ桹ΤꤿΤϤ⤦ϰϤʤΤ
  

  ⤷ХƸǤ顢ޤʤ˾餯ϡ˥Хûץ
  बä顢˴ؤХݡȤ FSF  linux-gcc ᡼
  󥰥ꥹȤޤ礦 gcc ʸɤɤǡ餬ɬפȤ
  ˴ؤ򤷤Ƥˤޤ礦

  4.3.  ܿ

  ǶǤϡؤ⤷ Linux ˰ܿƤʤץबäȤ顢
  Ϥ⤽ܿ٤̵ͤΤ٤ȤƤޤ :-)

  ⤦ܤˡ̤ Linux  100% POSIX ˤϥ
  򾯡ѹɤϤǤԤʤäѹϥץθ
  ˥եɥХåɤǤ礦ʹߤ `make' Ǽ¹ԥե뤬
  Ǥ褦ˤƤ館뤫⤷ޤ

  4.3.1.  BSD ϡbsd_ioctl daemon  <sgtty.h>

  ץ -I/usr/include/bsd ĤХѥǤޤ -lbsd
  ĤХ󥯤ǤޤʤĤޤ Makefile  CFLAGS 
  -I/usr/include/bsd ä LDFLAGS  -lbsd ä櫓Ǥˡ BSD
  Υʥο񤤤Ѥ뤿 -D__USE_BSD_SIGNAL äɬ
  Ϥ⤦ޤ -I/usr/include/bsd ä <signal.h> 򥤥󥯥롼
  ɤмưŪ򤵤ޤ

  4.3.2.  ּ줿ץʥSIGBUS, SIGEMT, SIGIOT, SIGTRAP, SIGSYS
  ʤ 

  Linux  POSIX ˽򤷤Ƥޤ POSIX Ƥ륷
  ǤϤޤ ISO/IEC 9945-1:1990 (IEEE Std 1003.1-1990) 
  B.3.3.1.1 Ѥޤ

        SIGBUS SIGEMT SIGIOT SIGTRAP SIGSYS γƥʥ
        POSIX.1 ޤΥʥο񤤤ϼˤä
        ۤʤäƤꡢŬʬबǤʤǤ POSIX μ
        ⤳ΥʥȯԤ뤳ȤϵƤޤȯԤ
        ʸ񲽤ʤФʤޤ󤷡饷ʥȯԤ˴ؤ뤢
        ¤򵭽ҤƤɬפޤ

  򤹤ľˡϤΥʥ SIGUNUSED Ȥƺ
  뤳ȤǤˡϤ򰷤äƤ륳ɤŬ #ifdef Ȥ
  ϤȤǤ

        #ifdef SIGSYS
        /* ... non-posix SIGSYS code here .... */
        #endif

  4.3.3.  K & R Υ

  GCC  ANSI ΥѥǤ¸ߤ C ΥɤϤۤȤ
   ANSI ǤϤޤ K & R Υɤ˴ؤ GCC Ǥ뤳Ȥ
  ѥΥե饰 -traditional դ뤳Ȥ餤Ǥ⤦̩
  ʥȥ򤹤뤳ȤǽǤ򥨥ߥ졼ȤΤϳƼ
  ƬˤμˤʤǤ礦ܤ gcc  info 򻲾ȤƲ

  -traditional  gcc ʸˡѤǤʤѤ뤳Ȥ
  Ʋ㤨 -traditional ˤä -fwritable-string ͭˤ
  ޤΥåˤʸϥǡΰ˽񤭹ޤޤʥ
  åʤȥץˤѹԤʤƥΰ˽񤭹ޤ
  ޤˡˤꡢץΥ̤äޤ

  4.3.4.  ץץåΥܥ뤬ΥץȥפȾͤ

  ꤬ʤΤϡѤδؿ Linux ΥإåեǤޥȤ
  Ƥ뤿ᡢץץåƱͤʥץȥǧ
  ʤʤȤǤɤΤ atoi()  atol() Ǥ

  4.3.5.  sprintf()

  ä SunOS ܿݤˡ˵ĤʤФʤʤΤϡ
  sprintf(string, fmt, ...) ͤ¿ Unix Ǥ string ؤΥݥ
  ǤΤФơ Linux ǤϡANSI ˽ʸؽ񤭹ޤ줿ʸ
  ˤʤäƤ뤳ȤǤ

  4.3.6.  fcntl ʤɡ FD_* Ϥɤˡ

  <sys/time.h> Ƥޤ fcntl Ѥ <unistd.h> 
  ˥󥯥롼ɤɬפǤ礦ºݤΥץȥפϤ
  Ƥޤ

  ̤ˡؿɬפ #include  man ڡ SYNOPSIS ˵
  ҤƤޤ

  4.3.7.  select() ٥ॢȤȥץबȤʤ
  

  Τ select()  timeout ѹޤǤǤ
  ˥奢ˤϰʲΤ褦˽񤫤Ƥޤ

        select() Ϳ줿 timeout ʤ⤷С˻Ĥä
        time ֤ͤ뤳Ȥˤä֤٤Ǥϥ
        ξΥСǥץȤǤ礦ä time-
        out Υݥ󥿤 select() θƤӽФˤäѹʤȤ
        ꤷɤ񤯤Τɤޤ

  ξ褬褿櫓ǤʤȤ⤳Ǥϡ select() Ȥ
  timeout ˤԤ֤λĤ꤬åȤޤǡǸޤ夷
  ʤ timeout  0 ˤʤޤΤǡ timeout ¤Τ򤽤Τޤޤˤ
  ⤦ select() Ƥ֤ȡ椬֤äƤޤȤ櫓
  

  ˤ select() Ƥ٤˥ॢȤͤ timeout
  ¤ΤƤɤΤǤޤǤΥɤʲΤ褦ʤΤ
  顢

              struct timeval timeout;
              timeout.tv_sec = 1; timeout.tv_usec = 0;
              while (some_condition)
                    select(n,readfds,writefds,exceptfds,&timeout);

  Τ褦ѤƲ

              struct timeval timeout;
              while (some_condition) {
                    timeout.tv_sec = 1; timeout.tv_usec = 0;
                    select(n,readfds,writefds,exceptfds,&timeout);
              }

  Mosaic ΤСǤϤ꤬ĤäƤȤޤž
  ϵΥ˥᡼󤬡ͥåȥ夹ǡ®٤ȿ
  㤷®ǲžΤǤ

  4.3.8.  ƥॳؤγ

  4.3.8.1.  ɾ

  ץब Ctrl-Z ߤƤƳʤ뤤ϥʥȯ
  ¾ξ: Ctrl-C ˤǤҥץνλʤɡˤȡץ
   "interruputed system call"  "write: unknown error" ȸä褦
  åФޤ

  4.3.8.2.  

  POSIX ΥƥǤϸŤ UNIX ⥷ʥå򤹤̤¿
  ʤäƤޤ Linux ϰʲΤ褦ʥʥϥɥ¹Ԥޤ

  o  Ʊʥåʥ޳ߤκݡ

  o  ƥॳ뤫

  o  ʲΥƥॳμ¹Ի:

  o  ߥʥ롢åȡѥפ /proc ΥեФ
     select() pause() connect() accept() read()

  o  ߥʥ롢åȡѥפӥ饤ץ󥿤ؤ write()

  o  FIFO PTY ӥꥢ饤 open()

  o  ߥʥؤ ioctl()

  o  fcntl() ؤ F_SETLKE ޥɡ

  o  wait4() syslog() ¾Ƥ TCP  NFS ư

  ¾ OS ǤϰʲΤ褦ʥƥॳ뤬оݤˤʤ⤢ޤ
  creat() close() getmsg() putmsg() msgrcv() msgsnd()
  recv() send() wait() waitpid() wait3() tcdrain()
  sigpause() semop()

  ⤷ץबϥɥäƤ륷ʥ뤬ƥॳȯ
  ȡΥʥϥɥ餬ƤӽФޤϥɥ餫椬
  ʥƥॳˡȡƥॳϼʬФߤ
   -1 ֤ȤȤ errno = EINTR 򥻥åȤޤץ
  ϤΤ褦ʤȤȤϻפäƤޤ󤫤顢۾ｪλޤ

  нˡĤޤ

  (1) Ƴʥϥɥ餴Ȥ SA_RESTART  sigaction ե饰
  äޤ㤨

          signal (sig_nr, my_signal_handler);

  Τ褦ʤΤʲΤ褦˽񤭴ޤ

          signal (sig_nr, my_signal_handler);
          { struct sigaction sa;
            sigaction (sig_nr, (struct sigaction *)0, &sa);
        #ifdef SA_RESTART
            sa.sa_flags |= SA_RESTART;
        #endif
        #ifdef SA_INTERRUPT
            sa.sa_flags &= ~ SA_INTERRUPT;
        #endif
            sigaction (sig_nr, &sa, (struct sigaction *)0);
          }

  ϤۤȤɤΥƥॳŬѤǤޤ read() write()
  ioctl() select() pause connect() γƥƥॳФƤ
  EINTR ΥåץǹԤʤɬפޤʲ򻲹ͤˤ
  

  (2) EINTR ץŪ˥å롣

  read()  ioctl() ФĤ򼨤ޤ

  ޤ read() ξǤ

        int result;
        while (len > 0) {
          result = read(fd,buffer,len);
          if (result < 0) break;
          buffer += result; len -= result;
        }

  Τ褦ʥɤʲΤ褦˽񤭴ޤ

        int result;
        while (len > 0) {
          result = read(fd,buffer,len);
          if (result < 0) { if (errno != EINTR) break; }
          else { buffer += result; len -= result; }
        }

   ioctl() Ǥ

        int result;
        result = ioctl(fd,cmd,addr);

  ʲΤ褦˽񤭴ޤ

        int result;
        do { result = ioctl(fd,cmd,addr); }
        while ((result == -1) && (errno == EINTR));

  BSD Unix ΥСˤäƤϡǥեȤǥƥॳľ
  ȤˤʤäƤ뤳Ȥ⤢ޤξ祷ƥॳǤˤϡ
  SV_INTERRUPUT  SA_INTERRUPT ե饰Ѥɬפޤ

  4.3.9.  񤭹߲ǽʸʥץबߤ

  GCC ϥ桼ꤷƤꡢʸϤޤȤư
  ȤߤʤƤޤä GCC Ǥʸϥƥȡʥɡΰ
  ݻޤϥץΥǥ᡼˥ڡ󥰤ޤ
  ʥåΰ take up ˡˤΤǡʸ񤭴
  褦ȤȥȰȿȤʤޤϻͤǤ

  ŤץξǤϤ줬ˤʤ뤳Ȥޤ㤨
  mktemp() ʸˤƸƤӽФʤɤǤ mktemp() ϰ
  񤭴褦Ȥ뤿Ǥ

  ˤĤˡޤ (a) -fwritable-string դƥ
  ѥ뤷 gcc ǡΰݻ褦롣 (b) Ȥʤ
  ʬǤʤʸ strcpy ơѤ롣

  4.3.10.  execl() Ԥ

  ְäƤӽФ򤷤Ƥ뤫Ǥ execl κǽΰϼ¹Ԥ
  ץǤܰʹߤΰϸƤӽФץ argv ˤʤ
  ޤ argv[0] ϥץΥѥΤΤǤ뤳ȤդƲ
  äexecl θƤӽФϰʲΤ褦˽ɬפޤ

        execl("/bin/ls","ls",NULL);

  ñ˰ʲΤ褦˽񤯤Τϴְ㤤Ǥ

        execl("/bin/ls", NULL);

  ʤȤ a.out ξϡåȤ˥ץ¹Ԥ
  ȡ¸Ƥʥߥå饤֥ɽ褦ˤʤäƤޤ
  ELF ǤϤޤäưȤʤޤ

  ⤷Υ饤֥ξɬפǤ顢äȴñʥ󥿡ե
  ޤʥߥåɤᤫ ldd  man ڡ򸫤Ʋ

  5.  ǥХåȥץե

  5.1.  ͽɡlint

  Linux ǤϹѤƤ lint Ϥޤ󡣤ۤȤɤοͤ gcc 
  Ф warning ­Ƥ뤫Ǥ餯 -Wall åäȤ
  ˤĤǤ礦 `Warnings, all' ΰ̣ǤΥ
  ϡɤ餫ȤƬáդʤΡwallˤϢۤ
  Ǥ͡

  ѥ֥åɥᥤ lint 
  <ftp://larch.lcs.mit.edu/pub/Larch/lclint> ǤޤɤΤ
  ɤˤĤƤϻΤޤ

  5.2.  ǥХå

  5.2.1.  ץ˥ǥХåˤ

  ѥȥ󥯤Ƥʳˤ -g åդ -fomit-
  frame-pointer åդʤɬפޤºݤˤƤʬ
  ѥ뤹ɬפϤʤǥХåʬΤߤ򤹤 OK Ǥ

  a.out ζͭ饤֥ -fomit-frame-pointer դƥѥ뤵
  ꡢФ gdb Ѥ뤳ȤϤǤޤ -g ץ
  ΤȤդ static 󥯤ˤʤäƤޤΤϤͳ
  

  libg.a ĤʤפȤåФƥ󥫤ưʤ
  ϡ /usr/lib/libg.a ʤΤǤϥǥХåǽˤʤäƤ
   C 饤֥Ǥ libc ΥХʥѥåäƤ뤫
  ϡʺǶǤ C 饤֥Ǥϡ libc ΥɤƼ
  ʬǥӥɤɬפޤºݤˤϤɬפʤۤȤɤ
   /usr/lib/libc.a Ф륷ܥå󥯤ĥСɬפʾ
  ϤǤ

  5.2.1.1.  ޤ줿ǥХåˤ

  GNU Υեȥ¿ -g ե饰Ĥ֤ǥѥ롢󥯤
  ƤޤΤ¹ԥեϵʤĤФ static 󥯡ˤ
  ʤäƤޤϤޤꤢ꤬ʤǤ͡

  ץ autoconf Ǻä configure ץȤ°Ƥ
  ϡ./configure CFLAGS= ޤ ./configure CFLAGS=-O2 Ȥ뤳Ȥǥ
  ХåѤΥɤղäʤ褦ˤǤޤ¾ξ Makefile 
  񤭴뤳ȤˤʤǤ礦 ELF ȤäƤϥץ
   -g ̵ͭ˴ؤ餺ʥߥå󥯤ȤʤäƤޤ strip 
  ɤǤ

  5.2.2.  Ωĥե

  gdb Ǥ⹭ȤƤޤ GNU archive sites
  <ftp://prep.ai.mit.edu/pub/gnu> 顢Хʥ tsx-11
  <ftp://tsx-11.mit.edu/pub/linux/packages/GCC> Ǥޤ xxgdb
   X ѤΥեȥɤǡʤä gdb 򥤥󥹥ȡ뤷Ƥɬ
  פޤ)  <ftp://ftp.x.org/contrib/xxgdb-1.08.tar.gz>
  ˤޤ

  UPS ǥХå Rick Sladkey ˤäưܿƤޤ X ư
  ޤ xxgdb Ȥϰäñʤƥȥ١ǥХåΥեȥ
  ɤǤϤޤ¿ʵǽޤΤǡǥХåȤԤ
  ϥåƤߤɤǤ礦 Linux ѤΥѥѤߥХʥ
  ȡꥸʥ UPS ΥɤؤΥѥåȤ
  <ftp://sunsite.unc.edu/pub/Linux/devel/debuggers/> ˤޤꥸ
  ʥΥ <ftp://ftp.x.org/contrib/ups-2.45.2.tar.Z>.  Ǥ

  ǥХåʥġ⤦ľҲ𤷤ޤ礦 strace ϥץब
  ȯԤ륷ƥॳɽƤޤޤѥѤߤΥХʥ
  ƤӽФѥ̾ɽƤΤǡʤƤɤΥե
  뤬ȤƤ뤫Τ뤳ȤǤޤץब
  ֡race conditionˤΥݡȤ򤷤Ƥʤɡ˻Ȥ
  ǤޤץबɤΤ褦ưƤ뤫γؽˤŬƤ
   strace κǿСʸ 3.0.8ˤ
  <ftp://ftp.std.com/pub/jrs/> ˤޤ

  ߤ 3.1.0.1 Τ褦Ǥ

  5.2.3.  Хå饦ɡʥǡ˥ץ

  ŵŪʥǡץǤ fork() ¹Ԥƥץλ
  ȥǥХåΥå⤢äȤ֤˽äƤޤޤ

  򤹤ִñˡ fork ˥֥졼ݥȤ򥻥åȤץ
  बߤȤ 0 ֤褦˶뤳ȤǤ

        (gdb) list
        1       #include <stdio.h>
        2
        3       main()
        4       {
        5         if(fork()==0) printf("child\n");
        6         else printf("parent\n");
        7       }
        (gdb) break fork
        Breakpoint 1 at 0x80003b8
        (gdb) run
        Starting program: /home/dan/src/hello/./fork
        Breakpoint 1 at 0x400177c4

        Breakpoint 1, 0x400177c4 in fork ()
        (gdb) return 0
        Make selected stack frame return now? (y or n) y
        #0  0x80004a8 in main ()
            at fork.c:5
        5         if(fork()==0) printf("child\n");
        (gdb) next
        Single stepping until exit from function fork,
        which has no line number information.
        child
        7       }

  5.2.4.  core ե

  Linux ϥ֡ȻǤ core եʤˤʤäƤޤ
  ˤϡȤ߹ߥޥɤȤäƺꤷƤ
   C ϡtcsh ʤɡˤǤ

        % limit core unlimited

  Ȥޤ Bourne ϡshbashzshpdkshˤǤϼΤ褦ˤ
  

        $ ulimit -c unlimited

  core ե̿̾ˡ⤦äˤ㤨Ф켫
  褦ʥǥХå¾ΥץबǤ core եǥХå
  Ȥʤɡˤϡͥ򾯡ѹвǽǤ fs/binfmt_aout.c
   fs/binfmt_elf.c ΥɤˡʲΤ褦ʬϤǤʿ
  ͥξǤŤͥǤϾ grep Ƥޤɬפ
  ⤷ޤˡ

                memcpy(corefile,"core.",5);
        #if 0
                memcpy(corefile+5,current->comm,sizeof(current->comm));
        #else
                corefile[4] = '\0';
        #endif

   0  1 Ѥ memcpy(corefile+5.. ιԤͭˤƤ
  

  5.3.  ץե

  ץե󥰤ȤϥץΤɤʬǤ¿ƤФ졢ǤĹ
  򿩤äƤΤĴ٤뤳ȤǤ̵̤ʻ֤ȤäƤ륳ɤŬ
  ΤɤˡǤץեԤˤϥߥ󥰾ɬפʥ
  ȥե -p Ĥƥѥ뤷ޤϤ줿ե뤫
  ˤ gprof ɬפˤʤޤbinutils ΥѥåäƤ
  ޤˡܺ٤ gprof  man ڡ򸫤Ƥ

  6.  

  餫ᤪǤꤷƤޤξϤιʣˤʤäƤޤߴ
  ΤʤХʥηĤ뤳ȡ static ʥ󥯤ȶͭ饤֥
  Ȥ礬뤳ȡ֥󥯡פȤդ֥ѥθ˹Ԥ
  ȡפȡ֥ѥ뤵줿ץबƤӽФ줿Ȥ˹Ԥ뤳ȡפ
  Ĥΰ̣Ѥ뤳ȡʡ֥(load)פȤդȤ
  դΰ̣) ʤɤǤǤ⺣ʤɤФʸ
  ꤴ㤴㤷ƤʬϾʤϤǤ顢ۤɿۤʤǤ
  

  ¿ʤȤ⺮򾯤ʤ뤿ˡ¹Ի˹Ԥ뤳ȤϡưŪ
  ɡפȸƤ֤ȤˤơƤϼξϤ˽񤭤ޤƱƤưŪ
  פȽ񤤤Ƥʸ⤢ޤʸǤϡưŪ󥯡פѤޤ
  פˡξϤǤϥѥκǽʳȤƹԤ󥯤ˤĤƤ
  ߤ򰷤ޤ

  6.1.  ͭ饤֥ static ʥ饤֥

  ץκǽʳϡ֥󥯡פȸƤФޤƤʤ礷
  ơ­ʤΤʤɤĴ٤ȤǤ֥ե򳫤פȤ
  褦κȤϡ¿ΥץǹԤޤäƤΤ褦
  ǽġʡפϥ饤֥η󶡤Ƥޤ̤ Linux 
  ƥǤϡ饤֥ /lib  /usr/lib ˤޤ¾ξˤ뤳
  Ȥޤޤޤˡ

  static ʥ饤֥Ѥϡ󥫤ϥץबɬפȤ
  õϤ¹ԥեˤʤ򥳥ԡޤͭ饤֥
  ϰäȤԤޤ󥫤Ͻϥեˡ֤Υץब
  ¹ԤȤˤϡޤ줳Υ饤֥꤬ɤƤʤȤ
  ޤפȤäåߤޤä餫˶ͭ饤
  ֥Ѥ¹ԥեΥϾʤޤޤ񤹤
  ǥ̤⾮ʤޤ Linux ˤΥǥեȤο
  񤤤Ǥϡͭ饤֥꤬ФѤʤ static ʥ
  Ԥޤ¹ԥեͭ饤֥ˤΤ static ˤʤ
  Ƥޤäϡ֤˶ͭ饤֥Υե뤬äơa.out
  Ǥ *.sa ELF Ǥ *.so Ǥˡ餬ɤ߹߲ǽˤʤäƤ뤫
  åƤ

  Linux Ǥ static ʥ饤֥ libname.a Ȥä褦̾ä
  ꡢͭ饤֥ libname.so.x.y.z ȤʤäƤޤ x.y.z ϥС
  ֹ򼨤ޤͭ饤֥ˤϥ󥯤ĥ뤳Ȥ¿
  ϽפʵǽäƤޤޤ a.out ѤǤ .sa Ȥ
  ĥҤäե⤢ϤǤɸ饤֥϶ͭΤΤ
  static ʷξޤޤƤޤ

  ץबɤΤ褦ʶͭ饤֥ɬפȤ뤫Ĵ٤ˤ ldd
  ޥɡList Dynamic DependenciesˤѤޤ

        $ ldd /usr/bin/lynx
                libncurses.so.1 => /usr/lib/libncurses.so.1.9.6
                libc.so.5 => /lib/libc.so.5.2.18

   WWW ֥饦Υץ lynx  libc.so.5 C 饤֥ˤ
  libncurses.so.1 ü饤֥) ѤƤ뤳Ȥ򼨤Ƥޤ
  ⤷Ѥ붦ͭ饤֥꤬ʤС ldd ɽϡstatically
  linkedϤstatically linked (ELF)פȤʤޤ

  6.2.  饤֥˿Ҥͤsin() Ϥɤ

  nm libraryname Ȥ libraryname ȤƤ륷ܥΥꥹȤɽ
  ޤ static ʥ饤֥ˤⶦͭ饤֥ˤͭǤ㤨
  tcgetattr() Ƥ饤֥꤬ΤꤿȤޤ礦
  Ϥޤʲ¹Ԥޤ

        $ nm libncurses.so.1 |grep tcget
                 U tcgetattr

  U ϡƤʤundefinedˡפȤ̣ޤä
  ncurses 饤֥Ǥ tcgetattr ѤƤޤϤƤʤ
  ȤˤȤˤʤޤ³ưʲΤ褦˼¹Ԥޤ

        $ nm libc.so.5 | grep tcget
        00010fe8 T __tcgetattr
        00010fe8 W tcgetattr
        00068718 T tcgetpgrp

  W ϡּ夤weak) פǤ뤳Ȥ򼨤ޤʤΥܥ
  ƤϤޤ¾Υ饤֥ˤäƾ񤭤뤳Ȥ򼨤
  ƤΤǤ̾ T Ǽޤtcgetpgrp Ǥˡ

  ȤǤΥȥФ libm(so|a) Ǥ <math.h> 
  ƤؿΤ math 饤֥ˤޤäƤ
  褦ʴؿѤˤϡ󥯤κݤ -lm ɬפˤʤ櫓Ǥ

  6.3.  եõ

  ld: Output file requires shared library `libfoo.so.1`

  ld ʤɤΥץˤե븡ˡϥСˤäưۤ
  ޤƤΥСˤơ/usr/lib ϸоݤäƤ
  ޤ⤷ʳΥǥ쥯ȥ饤֥긡оݤˤС
  gcc  ld ʤɤ -L ץѤƤ

  ǸĤʤСե뤬Υǥ쥯ȥˤ뤫ǧ
  Ƥ a.out Ǥ -lfoo ꤷƥ󥯤ȡ ld Ϥޤ
  libfoo.sa ʶͭ饤֥ˤõԤ libfoo.a static 饤
  ֥ˤ򸡺ޤ ELF ξ libfoo.so libfoo.a νõ
   libfoo.so ̾ libfoo.so.x ؤΥܥå󥯤ȤʤäƤ
  

  6.4.  ʬΥ饤֥

  6.4.1.  С

  ץƱ͡饤֥ˤХϤĤΤǡ֤ȤȤ˽
  Ƥޤޤʵǽɲä줿ꡢؿλͤѹ줿Ť
  Τ줿⤷ޤϥ饤֥Ѥץˤ
  Ǥ⤷Ťͤ˴ŤƤϤɤɤΤǤ礦

  äƥ饤֥ˤϥСѤޤ饤֥Ф
  Ԥäѹ־minor) פΤȡ礭majorˡפΤʬ
   minor ʤѹǤϡΥ饤֥Ѥץबư
  Ȥݾڤ뤳Ȥˤޤ饤֥ΥСϥե̾Ǥ狼
  褦ˤޤλȤ ELF ˤƤϤޤޤ
  ͳϸҡ libfoo.so.1.2  major С 1 ǡ minor С
   2 Ǥ뤳Ȥ򼨤ޤ minor СϾä¤Ĥ
  Ȥ⤢ޤ libc Ǥϡ֥ѥå٥פ minor Сɲä
  饤֥̾ libc.so.5.2.18 Τ褦ˤƤޤ ASCII üɽ
  ǽʸʤ顢ѻǤ _ ǤĤƤޤޤ

  ELF  a.out 礭ʰ㤤ΰĤϡͭ饤֥κˤޤ
  ޤñ ELF Τۤ鸫뤳Ȥˤޤ礦

  6.4.2.  ELF äƷɤʤˡ

  ELF Executable and Linking FormatˤϤȤ USLUNIX System
  Laboratoriesˤǳȯ줿ХʥǡߤǤ Solaris  System V
  Release 4 ѤƤޤ ELF ϰ Linux ѤƤ a.out
  ٤ǤΤǡ GCC  C 饤֥γȯԤϺ
  ǯ ELF  Linux ɸХʥȤƤѤ뤳Ȥ˷ޤ

  6.4.2.1.  ʤäơ

   `/news-archives/comp.sys.sun.misc' ˤʸ񤫤ȴ褷
  Ǥ

        ELFExecutable Linking Formatˤ SVR4 Ƴ줿ֿ⤷
        Ρץ֥ȥեǤ ELF ϥ桼ˤĥ
        ǽǤꡢ straight COFF ⤺äȶϤǤ ELF Ǥϡ
        ȥեǤդĹä󤫤ʤΤޤ
        ʷޤäǤʤȤϤߤʤޤˡ
        ϡCOFF Ȥϰۤʤ) ޤä֤ɬפʤ
        ֤ǤդǤ桼֥ȥե˿ʥǡƳ
        СɲäɤΤǤ ELF
        ˤϤޤǤΤΤꤺäȶϤʥǥХåٱѤηƳ
        Ƥޤ DWARFDebugging With Attibute Record Format
        ȸƤФƤޤߤΤȤ linux ǤϤεǽϴˤϥ
        ȤƤޤʤȤ塹ȷ³Ǥˡ DWARF
        DIEDebugging Information EntriesˤΥ󥯥ꥹȤ ELF Х
         .debug Ȥ˼Ƥޤ
        ꤵ줿ǥХåȰۤʤꡢDWARF DIE Ϥ줾ǤդĹ
        ʣ°פ˰¸ĥ꡼Υץ
        ȤƵҤƤޤ DIE  COFF  .debug 
        ԲǽǤä褦ʡʾC++ ηѾطꥹȤʤɡˤ
        ͭ뤳ȤǤΤǤ

        ELF ե SVR4 Solaris 2.0 ?ˤ ELF 饤֥
        ̤ƥޤΥ饤֥ ELF Ǽ갷
        ʤäƤʬФơñǹ®ʥ󥿡ե󶡤Ƥ
        ޤΥ饤֥ѤС ELF եμΤΤΤ
        ʤƤѤߤޤ Elf եȤƥ줿 UNIX Υե
        ϡǽ elf_open() ¹ԤСϤȤ
        elf_foobar() ǥ뤳ȤǤޤޤ COFF 
        Ƥ褦ˡºݤΥǥΰ֤Ƥޤ
        ɬפϤ⤦̵ΤǤ

  ELF ͭ a.out Υƥ ELF ƥ˥åץ
  졼ɤݤɬפƤ ELF-HOWTO ˵ҤƤޤ˥å
  & ڡȤĤϤޤ ELF-HOWTO ϡʸƱȤ
  ˤϤǤ

  6.4.2.2.  ELF ͭ饤֥

  libfoo.so Τ褦ʶͭ饤֥뤿δŪʼϰʲΤ
  ˤʤޤ

        $ gcc -fPIC -c *.c
        $ gcc -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0 *.o
        $ ln -s libfoo.so.1.0 libfoo.so.1
        $ ln -s libfoo.so.1 libfoo.so
        $ LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH ; export LD_LIBRARY_PATH

  ˤä libfoo.so.1.0 Ȥ̾ζͭ饤֥꤬Ǥld Τ
  Υ󥯡libfoo.soˤȥʥߥåΤΥ󥯡libfoo.so.1
  ޤƥȤˤϥȥǥ쥯ȥ LD_LIBRARY_PATH
  ɲäޤ

  饤֥꤬ư顢ưɬפޤ
  /usr/local/lib ꤬ŬǤ礦Ǻä褦ʥ󥯤⤽줾
  ľɬפޤ libfoo.so.1  libfoo.so.1.0 Υ󥯤
  ldconfig ˤäƾ˺ǿΤΤ˹ޤ̾ ldconfig ϥ֡
  ץΰǼ¹ԤƤϤǤ libfoo.so Υ󥯤ϥޥ˥奢
  ǹɬפޤĢ̤ϥ饤֥ơʥإåե
  ʤɤޤˤƱ˥åץǡȤʤǤ礦ξ
  libfoo.so -> libfoo.so.1 Ȥ󥯤ĥäƤ ldconfig ξԤ
  Ʊ˺ٿˤƤ褦ˤƤΤǤñǤ礦ʤ
  ϡˤԲĻ׵Ĥʸݤ˸뤳ȤˤʤǤ礦
  ǡʹƤʤפʤƸʤ褦ˡ

        $ su
        # cp libfoo.so.1.0 /usr/local/lib
        # /sbin/ldconfig
        # ( cd /usr/local/lib ; ln -s libfoo.so.1 libfoo.so )

  6.4.2.3.  Сֹդ sonameܥå

  ơΥ饤֥ soname ȤäƤޤ󥫤饤֥
  򸡺ݤˤ soname 򸫤Ĥȡ¹ԥХʥˤϥ饤֥
  ե̾ǤϤʤ soname ޤޤȥץμ¹Ի
  ˡưŪϥ󥯻Ѥ줿եǤϤʤ soname ǻꤵ
  եõޤ㤨 libfoo.so Ȥ饤֥꤬ libbar.so
  Ȥ soname ĤȤǽǡ libfoo.so ˥󥯤줿ץ
  ϼ¹Ի libbar.so 򸡺ޤ

  ̵̣ǽȻפޤ¤Ʊ饤֥ʣС򥷥
  ƥ˶¸뤿θȤʤ뵡ǽʤΤǤ Linux ˤ饤֥
  ̿̾ˡΥǥեȡɤ libfoo.so.1.2 Ȥä褦ʤ
  ǡФ soname  libfoo.so.1 ȤʤޤΥ饤֥꤬ɸ
  Υ饤֥ǥ쥯ȥ㤨 /usr/libˤ֤ȡ ldconfig
   libfoo.so.1 -> libfoo.so.1.2 Ȥܥå󥯤ꡢ¹Ի
  Ŭʥե뤬Ѥ褦ˤޤޤ libfoo.so ->
  libfoo.so.1 Ȥ󥯤ɬפǡˤ ld ϥ󥯻Ѥ٤
   soname 򸫤Ĥ뤳ȤǤ褦ˤʤޤ

  饤֥ΥХ꿷ǽɲáʺޤǤΥץ˱ƶͿ
  ʤϰϤǡˤꤷȤˤϡ soname ϤΤޤޤˤƥե̾
  ѹΤǤ饤֥ξ̸ߴʤʤäȤˤ soname 
  䤷ޤξ翷СΥ饤֥ϥե̾
  libfoo.so.2.0 soname  libfoo.so.2 Ȥʤޤ libfoo.so Υ
  ⿷СĥʤХ饤֥ιȼ³٤ƴ
  λȤˤʤޤ

  Фˤε§ǥ饤֥̿̾ԤʤФʤʤ櫓ǤϤޤ
  󤬡ɤǤΤѤɤȻפޤ ELF Ǥϥ饤֥
  ̿̾˴ؤƤޤ顢ͤ󤶤ꤹۤʣ̿̾
  ȤȤäƤǤޤºݤˤ뤫ɤϤޤ̤äǤ
  ͡

  ¹ˡޤȤޤ˽ major ʥåץ졼ɤϸߴ
  줿Ȥ minor ʥåץ졼ɤϤǤʤȤȤȤˤޤ
  ξϰʲΤ褦˥󥯤Ƥ

        gcc -shared -Wl,-soname,libfoo.so.major -o libfoo.so.major.minor

  ǤޤưϤǤ

  6.4.3.  a.outŤ

  饤֥꤬ ELF ذܹԤͳϡͭ饤֥ñ˺
  ˤޤ a.out ǤԲǽʤ櫓ǤϤޤ
  
  <ftp://tsx-11.mit.edu/pub/linux/packages/GCC/src/tools-2.17.tar.gz> 
  ꤷơѥåˤ 20 ڡΥɥȤɤߤޤ礦
  ϰɤФĤϤޤ󤬡Ǥ⺣ޤǽ񤤤ƤʸϤǡ
  䤬⤦ a.out ȤĤ̵꤬Ȥ餫Ǥ礦 :-)

  6.4.3.1.  ZMAGIC  QMAGIC

  Ť a.out μ¹ԥХʥ ZMAGIC ȸƤФޤ QMAGIC  ZMAGIC 
  ƤޤǽΥڡޥåפʤäƤޤä
  04096 Ϥɤˤޥåԥ󥰤ƤʤᡢNULL ݥ󥿤ѿ
  򻲾ȤȤְ㤤򸫤Ĥ䤹ʤäƤޤ0 Ϥ򥢥
  ȡȥåפ櫓Ǥˡޤ̤ȤƥХʥ꤬1K 
  餤˾ʤޤ

  ˸Ť󥫤Ǥ ZMAGIC ΤߤˡŤΤξˡǶΤΤ
  QMAGIC ΤߤбƤޤͥξΥեޥåȤ¹Ԥ
  ȤǤޤΤǡºݤˤϵˤɬפϤޤ

  ץब QMAGIC ɤϡ`file' ޥɤ¹Ԥ뤳Ȥˤä
  ɽޤ

  6.4.3.2.  ե

  a.out ζͭ饤֥ĤΥեȰĤΥܥå󥯤鹽
  ޤʸǤޤǻȤäƤfooץ饤֥ˤȤ
  ȡ libfoo.sa  libfoo.so.1.2 ºݤΥե롢 libfoo.so.1 
  libfoo.so.1.2 ؤΥܥå󥯤ǤϤɤʤΤ
  礦

  ѥκݤˡ ld  libfoo.sa õޤΥեϥ饤֥
  ΡstubץեȸƤФ졢黲ȤǤǡȼ¹Ի󥯤ɬ
  פʴؿؤΥݥ󥿤ȤݻƤޤ

  ¹Իˤϡʥߥå libfoo.so.1 õޤϼ
  եǤϤʤܥå󥯤ˤʤäƤơХեåʤɤˤ
  륢åץǡȤκݤˡΥ饤֥ȤäƤץ꤬
  ʤ褦ˤƤޤСΥ饤֥libfoo.so.1.3 
  ɡˤС ldconfig ¹Ԥ뤳ȤˤäƥѹǤ
  饤֥ѤƤץˤϱƶͿʤƤߤޤ

  DLL 饤֥ʥȡȥȤȤϾΤƤޤ :-pˤ
  static ʥ饤֥٤礭ʤ礬¿Ǥ DLL 饤֥
  ϾγĥơholeפȤΰ褬ݤƤޤ
  hole ΰ褬ºݤˤϥǥ񤷤ʤ褦ˤ뤳ȤǤޤñ
  cp 뤫뤤 makehole ޥɤѤޤa.out Ǥϡ˥ɥ
  ϸꤵƤΤǡ饤֥깽۸ strip 뤳ȤǤޤ
  ʤ ELF 饤֥ strip ƤϤޤ

  6.4.3.3.  libc-liteפȤϡ

  libc-lite  libc 饤֥ηǤǤեåԡǤѤŬ
  UNIX δŪʥΤۤȤɤ򥫥СƤޤ libc-lite ˤ
  curses dgm termcap ʤɤΥɤäƤޤ󡣤⤷ȤΥ
  ƥ /lib/libc.so.4  lite ǤؤΥ󥯤Ǥ顢 full 
  Ǥ֤ɤǤ礦

  6.4.4.  󥯡褯

  󥯤κݤ˾㳲ä˶Ƥ䤬Ǥ뤳Ȥ
  ޤ̵⤷ޤ󤬡ƱΤ󤭤餳˺ܤ뤳ȤϤ
  ޤ...

     ͭǥ󥯤Τ static ˤʤäƤޤ

        ld ͭ饤֥򸡺Ǥ褦줾󥯤ĥ
        Ƥ뤫ǧƤ ELF ξϥܥå
        libfoo.so  a.out Ǥ libfoo.sa ¥եĥƤʤ
        Фʤޤ󡣤 ELF binutils  2.5  2.6 ˹
        Ȥ¿𤵤ޤΥСǤϥ饤֥
        θָ׹ԤäƤꡢƤΥ󥯤ʤƤư뤳Ȥ
        ޤСǤ¾ΥƥȤ
        뤿ˡεǽޤޤ¬ȡ꿼
        ǽ뤳Ȥ줿ͳΰĤǤ

      DLL Υġ `mkimage  libgcc θ˼Ԥޤ

        libc.so.4.5.x ʾǤϡ libgcc ϶ͭ饤֥ǤϤʤʤޤ
        ä꤬ԤΡ-lgccפϡ`gcc
        -print-libgcc-file-name`פ֤ƤХå
        `פ˺ʤ

        ޤ /usr/lib/libgcc* ƺƤפǤ

      __NEEDS_SHRLIB_libc_4 multiply defined ȤåФ
        ϾƱǤ

      DLL ƹۤȤ ``Assersion failure'' Ȥå
        
        Υåϡ餯ץơ֥ slot Τΰ
        СեƤޤäȤ̣Ƥޤꥸʥ
        jump.vars եͽ󤷤ΰ褬Ȥȹͤ
        ޤθĽ getsize ˤäǤޤgetsize 
        tools-2.17.tar.gz ѥåˤޤˡξǰʤ顢
        ֥ major С夲̸ߴ򤢤뤳Ȥ
        ͣβˡȤʤǤ礦

     ld: output file needs shared library libc.so.4
         libc ʳΥ饤֥X طΥ饤֥ʤɡˤѤƤ
        ꡢ -g Ĥ -static ĤƤʤޤ

        ͭ饤֥б stub ե*.saˤˤϡ̾
        _NEEDS_SHRLIB_libc_4 Ȥ̤Υܥ뤬ޤޤƤޤ
         libc.sa stub ˤäƲ褵Ƥޤ -g ꤵƤ
         libg.a ޤ libc.a ȤΥ󥯤ԤޤȤ
        Υ饤֥ǤϾΥܥϲ褵ƤʤΤǤä
        ɽΥ顼Ȥʤޤ

         -g Ĥƥѥ뤹Ȥ -static ɲä뤫
        ϥ󥯤κݤ -g ѤʤǤ󥯤κݤ -g 
        ѤʤƤ⡢ơΥ -g ǥѥ뤷ƤСۤȤ
        ξϽʬʥǥХåޤ

  7.  ưŪɡDynamic Loading

  ξϤϺΤȤޤûǤ䤬 ELF HOWTO ƤòϢ
  졢ĥƤǤ礦

  7.1.  ǰ

  ξ쵤ɤͤϤ⤦ʹ˰⤷ޤ󤬡 Linux 
  ͭ饤֥ѤƤޤ̾򸡺֤פȤư
  󥯻¹Իꤵ褦ˤʤäΤǤ

  7.2.  顼å

  󥯥顼ääƤϤǤʤ⤷ޤ
  ˤޤȤ᤿Ȼפޤ...

      can't load library: /lib/libxxx.so, Incompatible version
        a.out Τߡˤ xxx 饤֥ major С󤬤äƤ
        ʤǤܥå󥯤㤦СΥ饤֥
        ĥäǤϤǤʤʤȤ򤷤 segfault 餤Ǻ
        鹬ȤΤǤˡСꤷƤ
        ELF ξ硢Ʊ褦ʾǤϰʲΤ褦ʥåȤʤޤ

           ftp: can't load library 'libreadline.so.2'

      warning using incompatible library version xxx
        a.out ΤߡˤΥåǤץ򥳥ѥ뤷
         minor С󤬸Ť饤֥ȤäƤ˽Ф
        ¿ʬץϤưȻפޤǤ⥢åץ졼ɤ
        ɤǤ礦͡

  7.3.  ưŪư򥳥ȥ뤹

  ʥߥåȤĶѿ¿ϤäƤޤΤۤ
  ɤ ldd ȤΤʤΤǡ ldd б륹åĤƼ¹Ԥ
  ⤷ޤ

  o  LD_BIND_NOW ̾饤֥δؿϡƤӽФޤǥ
     ޤ󡣤Υե饰ꤷƤȡ饤֥꤬ɤ줿Ȥ
     Ƥδؿǧޤ( äƻ֤ޤˡΥ
     ϥץƥȤȤˡƤȥ󥯤Ƥ
     뤫ǧȤΩޤ

  o  LD_PRELOAD Ȥȴؿ־񤭡פեǤޤ
     㤨Хƴؿơ `malloc' ֤
     ˤϡμ malloc.o ˥ѥ뤷ưʲΤ褦ˤޤ

        $ LD_PRELOAD=malloc.o; export LD_PRELOAD
        $ some_test_program

     LD_ELF_PRELOAD  LD_AOUT_PRELOAD Ʊ褦ʵǽޤ
     줾ΥХʥФƤΤͭˤʤޤ LD_some-
     thing_PRELOAD  LD_PRELOAD ƱƤϡϰϤζ
     ͭˤʤޤ

  o  LD_LIBRARY_PATH ϥǶڤ줿ꥹȤǡͭ饤֥򸡺
     ǥ쥯ȥꤷޤλϼ¹ԻΤߤѤ졢 ld
     ˤϱƶޤ󡣤ޤ setuid  setgid 줿ץˤ̵
     ˤ LD_ELF_LIBRARY_PATH  LD_AOUT_LIBRARY_PATH ꡢ
     ʥˤäưۤʤ븡ꥹȤǤޤ̾
     LD_LIBRARY_PATH ɬפʤǤ礦ǥ쥯ȥ /etc/ld.so.conf
     ˲ä ldconfig ¹Ԥʤ򤪴ᤷޤ

  o  LD_NOWARN  a.out ΤߤŬѤޤꤵƤȡʤĤޤ
     LD_NOWARN=true; export LD_NOWARNˡ̿ŪǤʤٹå
     minor С󤬤äƤʤʤɡˤϤʤʤޤ

  o  LD_WARN  ELF ˤΤŬѤޤꤵƤ̾̿Ū
     Ǥ ``Can't find library'' ˥󥰤Ѥޤ̾Ϥ
     Ѥ뤳ȤϤʤǤ礦 ldd ˤϽפǤ

  o  LD_TRACE_LOADER_OBJECTS  ELF ˤΤŬѤޤꤹȡ
     μ¹ԥץϡʬ ldd βǼ¹ԤƤΤȹͤ
     褦ˤʤޤ

        $ LD_TRACE_LOADED_OBJECTS=true /usr/bin/lynx
                libncurses.so.1 => /usr/lib/libncurses.so.1.9.6
                libc.so.5 => /lib/libc.so.5.2.18

  7.4.  ưŪɤѤץ

  Solaris 2.x ǤΥʥߥåɵǽ˻ƤޤʤȤäƤ
  Solaris 桼ˤ狼ޤ͡ˡŪƤ H. J. Lu  ELF
  programming document  dlopen(3)  man ڡǾܽҤƤ
  Ԥ ld.so ΥѥåäƤޤʲˤäȤ
  ޤ -ldl Ĥƥ󥯤Ƥ

        #include <dlfcn.h>
        #include <stdio.h>

        main()
        {
          void *libc;
          void (*printf_call)();

          if(libc=dlopen("/lib/libc.so.5",RTLD_LAZY))
          {
            printf_call=dlsym(libc,"printf");
            (*printf_call)("hello, world\n");
          }

        }

  8.  ȯԤϢˤ

  8.1.  ХݡȤ

  ޤʤǤ Linux ꤫ͭ¾Υƥ
  gcc Ǥⵯ뤫ͥΥС˸꤫ͭ饤֥ΥС
  ϡ󥯤 static ˤв褹뤫򵯤ץ
  ûǥ󥹥ȥ졼ǤڤĤ뤳ȤǤ뤫ʤɤǤ

  줬Ѥ顢ɤΥץ˥Х뤫ϤäꤹȻפޤ
  GCC ξϡХݡȤμ³ info եƤޤ
  ld.so  C 饤֥ꡢ math 饤֥ξ linux-
  gcc@vger.rutgers.edu ˥᡼äƤǽʤûХ
  ¸ߤϤäȼץźդΥץꤷƤư
  ȼºݤưˤĤƤäƤ

  8.2.  ȯ˻ä

  GCC  C 饤֥γȯ˻äϡޤ᡼󥰥ꥹ
  linux-gcc@vger.rutgers.edu ˻äƤɤʤȤ
  뤫ΤꤿʤСꥹȤΥ֤
  <http://homer.ncm.com/linux-gcc/> ˤޤμˤʤ٤ȤϤ
  ʤǤ

  9.  ¾

  9.1.  ռ

        ֲ桹פȸդȤȤǤΤϡΤԽԡ
        ˥ʥäƤ͡ΤߤǤ

  (Mark Twain)

   HOWTO  Mitchum DSouza  GCC-FAQ ¿äƤ
  ޤ GCC-FAQ ʬΡʬΡ˾ϡʸˤΤޤ
  ηƳƤޤ HOWTO ʸ桢;Ρʡֻסˤؤ
  Τϲ桹Τɤξ⤢ꤨޤֻϤƤޤ󡣤
  ȤˤäƤʤΥǥ䥷ƥ󤬾ƤƤޤ
  ƤΤˤʤǤפȤäƤϡä˻̵꤬в桹
  ξƤϤޤޤ

  ʸ˽Ϥä͡Ǥʥեȥ͡ ASCII Ǥˡ
  Andrew Tefft, Axel Boldt, Bill Metzenthen, Bruce Evans, Bruno Haible,
  Daniel Barlow, Daniel Quinlan, David Engel, Dirk Hohndel, Eric
  Youngdale, Fergus Henderson, H.J. Lu, Jens Schweikhardt, Kai Petzke,
  Michael Meissner, Mitchum DSouza, Olaf Flebbe, Paul Gortmaker, Rik
  Faith, Steven S. Dick, Tuomas J Lukka, Ƥ Linux Torvalds
  बʤФʸ˴ϢƤγưϰ̣ʤäǤ
  ⤽ԤʤäǤ礦 :-)

  ⤷ʸHOWTO ˤǤ FAQ ˤǤ˽ϤäǡꥹȤ
  ϳƤä㤤ޤ顢ɤΤ餻ޤ褦
  ޤ˥᡼뤷Ƥнޤ

  ܸäƤϡ帶󡢤ޤ󡢳߷ٹ
  󡢻ꤵ󡢰ƣ󡢤ϤȤ JF ᡼󥰥ꥹȤγ
  ͭפʤŦĺޤ

  9.2.  ˤĤ

  ǤϤʸǤϤޤƤߤ褦Ȼפɤ
  ꤤޤǤΤ餻Ƥ䤬θդäǽ
  ϡʻǰʤȤˡ100  1 ʲǤ礦ϤȤ⤫ϴǤ
  ĤǤ

  9.3.  եɥХå

  ޤޤΥɥ쥹 daniel.barlow@linux.org ˥᡼뤷Ƥ
   PGP ID 5F263625ˤ web ڡ
  <http://ftp.linux.org.uk/~barlow/> ˤޤ̩̿ɬפȤ
  ѤƤ

  ʸǤΥ᡼륢ɥ쥹 dan@detached.demon.co.uk ȤʤäƤޤ
   daniel.barlow@linux.org ɤǤ

  9.4.  ˡŪ

  ϸʸ⼨ޤ

  All trademarks used in this document are acknowledged as being owned
  by their respective owners.

  This document is copyright (C) 1996 Daniel Barlow
  <dan@detached.demon.co.uk> It may be reproduced and distributed in
  whole or in part, in any medium physical or electronic, as long as
  this copyright notice is retained on all copies. Commercial
  redistribution is allowed and encouraged; however, the author would
  like to be notified of any such distributions.

  All translations, derivative works, or aggregate works incorporating
  any Linux HOWTO documents must be covered under this copyright notice.
  That is, you may not produce a derivative work from a HOWTO and impose
  additional restrictions on its distribution. Exceptions to these rules
  may be granted under certain conditions; please contact the Linux
  HOWTO coordinator at the address given below.

  In short, we wish to promote dissemination of this information through
  as many channels as possible. However, we do wish to retain copyright
  on the HOWTO documents, and would like to be notified of any plans to
  redistribute the HOWTOs.

  If you have questions, please contact Greg Hankins, the Linux HOWTO
  coordinator, at gregh@sunsite.unc.edu via email.

  ܸ

  ʸǰѤƤ뾦ɸϤ줾ͭԤ˵ΤǤ

  ʸ (C) 1996 Daniel Barlow <dan@detached.demon.co.uk>
  ͭƤޤʸΤ뤤ϰϡʪŪŻŪ鷺
  ǥ˼ͳʣ̤뤳ȤǤޤκݤˤϤ
  ƤΥԡղäɬפޤŪۤĤ
  夷ޤκݤˤԤˤΤ餻褦ꤤޤ

  Linux HOWTO ʸޤԽȤ̤ϡƤ
  ˽ɬפޤʤ HOWTO ˡ
  ɲùä뤳ȤϤǤޤâŬǧ줿㳰
  뤳ȤǤޤ Linux HOWTO δԤϢƤɥ쥹
  ϰʲ˼ޤ

  פ˲桹Ϥξǽʸ¤ˡǹ᤿ȻפäƤΤ
  桹 HOWTO ʸ˴ؤݻ³뤳Ȥ˾Ǥ
  ޤHOWTO ۤײˤĤΤ餻Ƥ餦Ȥ˾Ǥ
  

  ⤷ä顢Linux HOWTO Ԥ Greg Hankins ϢƤ
  Żҥ᡼Υɥ쥹 gregh@sunsite.unc.edu Ǥ

  10.  

  ե٥åȰʳʸǤϤޤդ ASCII ν¤٤Ƥ
  

  o  -fwritable-strings ``39'' ``56''

  o  /lib/cpp ``16''

  o  a.out ``1''

  o  ar ``10''

  o  as ``8''

  o  <asm/*.h> ``19''

  o  atoi() ``40''

  o  atol() ``41''

  o  binaries too big ``63'' ``65'' ``77''

  o  chewing gum ``3''

  o  cos() ``68''

  o  debugging ``59''

  o  dlopen() ``82''

  o  dlsym() ``83''

  o  documentation ``4''

  o  EINTR ``52''

  o  elf ``0'' ``71''

  o  execl() ``57''

  o  fcntl ``47''

  o  FD_CLR ``44''

  o  FD_ISSET ``45''

  o  FD_SET ``43''

  o  FD_ZERO ``46''

  o  file ``2''

  o  <float.h> ``20''

  o  gcc ``6''

  o  gcc -fomit-frame-pointer ``61''

  o  gcc -g ``60''

  o  gcc -v ``14''

  o  gcc, bugs ``15'' ``28'' ``29'' ``84''

  o  gcc, flags ``13'' ``25'' ``26''

  o  gdb ``64''

  o  header files ``17''

  o  interrupted system calls ``51''

  o  ld ``9''

  o  LD_* environment variables ``80''

  o  ldd ``81''

  o  libc ``7''

  o  libg.a ``62''

  o  libgcc ``79''

  o  <limits.h> ``21''

  o  lint ``58''

  o  <linux/*.h> ``18''

  o  manual pages ``5''

  o  <math.h> ``70''

  o  maths ``69''

  o  mktemp() ``55''

  o  optimisation ``27''

  o  QMAGIC ``76''

  o  segmentation fault ``30'' ``54''

  o  segmentation fault, in GCC ``33''

  o  select() ``50''

  o  SIGBUS ``34''

  o  SIGEMT ``35''

  o  SIGIOT ``36''

  o  SIGSEGV ``31'' ``53''

  o  SIGSEGV, in gcc ``32''

  o  SIGSYS ``38''

  o  SIGTRAP ``37''

  o  sin() ``67''

  o  soname ``73''

  o  sprintf() ``42''

  o  statically linked binaries, unexpected ``66'' ``78''

  o  <stdarg.h> ``23''

  o  <stddef.h> ``24''

  o  strings ``11''

  o  <sys/time.h> ``48''

  o  <unistd.h> ``49''

  o  <varargs.h> ``22''

  o  version numbers ``12'' ``74''

  o  weird things ``72''

  o  ZMAGIC ``75''

