zlibのクロスコンパイル

1.準備
 ・クロスコンパイル環境は、OpenWrtのカーネルを再構築した時のものを使用する。
 ・クロスコンパイル用gccのある場所にパスを通す。(私の場合)
  # export PATH=/home/anabuki/work/kamikaze_7.09/staging_dir_mips/bin:$PATH
  パスはシステムを終了すると消滅するので立ち上げる度に設定する。
 ・http://www.zlib.net/zlib-1.2.3.tar.gzよ りソースをもらってきてこれを適当なディレクトリー
  で展開する。私は/root/work/nagios以下を使用した。
 ・thinkpad:~/work/nagios# tar zxvf zlib-1.2.3.tar.gz
2.クロスコンパイルの実行
  http://www.geocities.jp/h83069f/linux/host/crosscompile_zlib.html
  ここを参考にさせて頂いたというかそのままコピーさせていただいた。

 ・thinkpad:~/work/nagios/zlib-1.2.3# ./configure --shared --prefix=/root/work/nagios/local/
  prefixの指定は当面ここにインストールとておき、後でまとめて/usr/local/以下に移動した。
thinkpad:~/work/nagios/zlib-1.2.3# ./configure --shared --prefix=/root/work/nagios/local/
Checking for gcc...
Checking for shared library support...
Building shared library libz.so.1.2.3 with gcc.
Checking for unistd.h... Yes.
Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()
Checking for vsnprintf() in stdio.h... Yes.
Checking for return value of vsnprintf()... Yes.
Checking for errno.h... Yes.
Checking for mmap support... Yes.

  これでMakefileが作成されるが、コンパイラーがx86のままなのでこれをAtheros用のmipsに修正する。
 ・Makefileの修正
  viエディターでMakefileを読み込み赤字の 部分を修正する。
thinkpad:~/work/nagios/zlib-1.2.3# vi Makefile
# To install in $HOME instead of /usr/local, use:
#    make install prefix=$HOME

CC=mips-linux-gcc

CFLAGS=-fPIC -O3 -DUSE_MMAP
#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
#CFLAGS=-g -DDEBUG
#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
#           -Wstrict-prototypes -Wmissing-prototypes

LDFLAGS=-L. libz.so.1.2.3
LDSHARED=mips-linux-gcc -shared -Wl,-soname,libz.so.1
CPP=mips-linux-gcc -E

LIBS=libz.so.1.2.3
SHAREDLIB=libz.so
SHAREDLIBV=libz.so.1.2.3
SHAREDLIBM=libz.so.1

AR=mips-linux-ar rc
RANLIB=ranlib
TAR=tar
 ・make clean の実行
thinkpad:~/work/nagios/zlib-1.2.3# make clean
rm -f *.o *~ example minigzip \
           libz.* foo.gz so_locations \
           _match.s maketree contrib/infback9/*.o

 ・libz.aのコンパイル 
thinkpad:~/work/nagios/zlib-1.2.3# make all libz.a
mips-linux-gcc -fPIC -O3 -DUSE_MMAP   -c -o example.o example.c
mips-linux-gcc -fPIC -O3 -DUSE_MMAP   -c -o adler32.o adler32.c
mips-linux-gcc -fPIC -O3 -DUSE_MMAP   -c -o compress.o compress.c
mips-linux-gcc -fPIC -O3 -DUSE_MMAP   -c -o crc32.o crc32.c
mips-linux-gcc -fPIC -O3 -DUSE_MMAP   -c -o gzio.o gzio.c
mips-linux-gcc -fPIC -O3 -DUSE_MMAP   -c -o uncompr.o uncompr.c
mips-linux-gcc -fPIC -O3 -DUSE_MMAP   -c -o deflate.o deflate.c
mips-linux-gcc -fPIC -O3 -DUSE_MMAP   -c -o trees.o trees.c
mips-linux-gcc -fPIC -O3 -DUSE_MMAP   -c -o zutil.o zutil.c
mips-linux-gcc -fPIC -O3 -DUSE_MMAP   -c -o inflate.o inflate.c
mips-linux-gcc -fPIC -O3 -DUSE_MMAP   -c -o infback.o infback.c
mips-linux-gcc -fPIC -O3 -DUSE_MMAP   -c -o inftrees.o inftrees.c
mips-linux-gcc -fPIC -O3 -DUSE_MMAP   -c -o inffast.o inffast.c
mips-linux-gcc -shared -Wl,-soname,libz.so.1 -o libz.so.1.2.3 adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o
rm -f libz.so libz.so.1
ln -s libz.so.1.2.3 libz.so
ln -s libz.so.1.2.3 libz.so.1
mips-linux-gcc -fPIC -O3 -DUSE_MMAP -o example example.o -L. libz.so.1.2.3
mips-linux-gcc -fPIC -O3 -DUSE_MMAP   -c -o minigzip.o minigzip.c
mips-linux-gcc -fPIC -O3 -DUSE_MMAP -o minigzip minigzip.o -L. libz.so.1.2.3
mips-linux-ar rc libz.a adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o
  でコンパイルが完了するので所定の場所、今回は/root/work/nagios/local/にインストールする。

 ・make install
thinkpad:~/work/nagios/zlib-1.2.3# make install
cp zlib.h zconf.h /root/work/nagios/local//include
chmod 644 /root/work/nagios/local//include/zlib.h /root/work/nagios/local//include/zconf.h
cp libz.so.1.2.3 /root/work/nagios/local//lib
cd /root/work/nagios/local//lib; chmod 755 libz.so.1.2.3
cd /root/work/nagios/local//lib; if test -f libz.so.1.2.3; then \
          rm -f libz.so libz.so.1; \
          ln -s libz.so.1.2.3 libz.so; \
          ln -s libz.so.1.2.3 libz.so.1; \
          (ldconfig || true)  >/dev/null 2>&1; \
        fi
cp zlib.3 /root/work/nagios/local//share/man/man3
chmod 644 /root/work/nagios/local//share/man/man3/zlib.3

 ・mips用にコンパイルできたかの確認 
thinkpad:~/work/nagios/local/lib# file libz.so.1.2.3
libz.so.1.2.3: ELF 32-bit MSB shared object, MIPS, version 1 (SYSV), not stripped
   MIPSと表示されている。

 ・この状態では本体のlibz.aは所定のディレクトリである/root/work/nagios/local/libにインストール
  されていないのでこれをコピーしておく。
thinkpad:~/work/nagios/zlib-1.2.3# ls ../local/lib/
libz.so  libz.so.1  libz.so.1.2.3
thinkpad:~/work/nagios/zlib-1.2.3# cp libz.a ../local/lib/
thinkpad:~/work/nagios/zlib-1.2.3# ls ../local/lib/
libz.a  libz.so  libz.so.1  libz.so.1.2.3
 
 以上でzlibのクロスコンパイルは完了である。ここでインストール先として/root/work/nagios/local/と
 したが、別の用途に使っているのでこのディレクトリを汚したくないなどの理由が無い限りこれを
 デフォルトの/usr/local/とする方がnagiosのインストール時に無用のトラブルを避けることが出来
 そうである。