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が実行される。
-
行き詰まり