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のインストール時に無用のトラブルを避けることが出来
そうである。
|