ZAURUSのクロスコンパイル環境を作る

ZAURUSのクロスコンパイル環境を、OpenBSD/i386上に作る。


とりあえず、make cross-distrib

  • まず、ソースを最新にします。

  • ただし、OpenBSD 4.2の最新です。

  • タグを指定しないで、cvs を実行すると、currentになってしまいます。

    # cd /usr/src
    # CVSROOT=anoncvs@anoncvs.jp.openbsd.org:/cvs cvs update -P -rOPENBSD_4_2
    
  • しばらく待つと、ソースが最新になります。

  • ここで、zaurusをターゲットとしたクロスコンパイル環境を作ります。

    # pwd
    /usr/src
    # TARGET=zaurus make cross-distrib
    
  • しばらくすると、エラーがでます。

    /usr/cross/zaurus/usr/bin/cc -nostdlib -L/usr/cross/zaurus/usr/lib -static   -o
    comsat comsat.o
    /usr/cross/zaurus/usr/lib/gcc-lib/arm-unknown-openbsd4.2/3.3.5/../../../../arm-u
    nknown-openbsd4.2/bin/ld: warning: cannot find entry symbol _start; defaulting t
    o 00008114
    comsat.o(.text+0x3c): In function `main':
    : undefined reference to `getsockname'
    comsat.o(.text+0x4c): In function `main':
    : undefined reference to `__errno'
    comsat.o(.text+0x58): In function `main':
    : undefined reference to `strerror'
     :
     :
    comsat.o(.text+0xd58): In function `jkfprintf':
    : undefined reference to `__guard'
    collect2: ld returned 1 exit status
    *** Error code 1
    
    Stop in /usr/src/libexec/comsat (line 95 of /usr/share/mk/bsd.prog.mk).
    *** Error code 1
    
    Stop in /usr/src/libexec.
    *** Error code 1
    
    Stop in /usr/src (line 277 of Makefile.cross).
    

エラーに対処してみる(まだ、対処できていない)

  • symbol _start がねーと言っています。

  • ccのオプションに-nostdlibを指定しているため、標準ライブラリがリンクされていないのが原因と考えられます。

  • 該当のディレクトリへ行き、自分でコンパイルします。

    # cd /usr/src/libexec/comsat
    # /usr/cross/zaurus/usr/bin/cc -L/usr/cross/zaurus/usr/lib \\
                  -static   -c comsat.c
    # /usr/cross/zaurus/usr/bin/cc -L/usr/cross/zaurus/usr/lib \\
                  -static   -o comsat comsat.o
    
  • もう一度、make cross-contrib してみます。

    # cd /usr/src
    # TARGET=zaurus make cross-distrib
    
  • 同じエラーで止まる。

  • comsatが、comsat.oやcomsat.cより新しいから、コンパイルはされないと思うんだけど、

  • なぜ、makeが実行される。

  • 行き詰まり