在一个项目中使用到了tcpsvd和udpsvd,但是由于bosybox无法更新,不能使用bosybox中的ipsvd程序,因此使用ipsvd的源码进行交叉编译来获取tcpsvd和udpsvd.此处使用的交叉编译器为/eldk-5.5.2/powerpc/;
$CC=“powerpc-linux-gcc -m32 -mhard-float --sysroot=/opt/eldk-5.5.2/powerpc/sysroots/powerpc-linux”
$AR=powerpc-linux-ar
下载
wget http://smarden.org/ipsvd/ipsvd-1.0.0.tar.gz
解压
tar -xzvf ipsvd-1.0.0.tar.gz
cd net/ipsvd-1.0.0/
交叉编译和修改
- 首先运行
./package/compile
,将生成./compile/
目录,并使用gcc编译器进行编译 - 进入
./compile/
目录,依次修改print-ar.sh,print-cc.sh,print-ld.sh
,如下
>>> cat print-ar.sh
cat warn-auto.sh
echo 'main="$1"; shift'
echo 'rm -f "$main"'
echo '$AR cr "$main" ${1+"$@"}'
case "`cat systype`" in
sunos-5.*) ;;
unix_sv*) ;;
irix64-*) ;;
irix-*) ;;
dgux-*) ;;
hp-ux-*) ;;
sco*) ;;
*) echo 'powerpc-linux-ranlib "$main"' ;;
esac
>>> cat print-cc.sh
#cc="`head -n1 conf-cc`"
cc="$CC"
cat warn-auto.sh
echo exec "$cc" '-c ${1+"$@"}'
>>> cat print-ld.sh
#ld="`head -n1 conf-ld`"
ld="$CC -s"
cat warn-auto.sh
echo 'main="$1"; shift'
echo exec "$ld" '-o "$main" "$main".o ${1+"$@"}'
- 运行
make tcpsvd udpsvd
- 此时报错
/bin/sh: ./chkshsgr: cannot execute binary file: Exec format error
,这是由于chkshsgr这个程序被交叉编译了,根据makefile中的chkshsgr的生成规则,我们重新编译下chkshsgr,如下
#由于是单个文件,所以一条指令就行
gcc -O2 -Wall chkshsgr.c -o chkshsgr
- 重新运行
make tcpsvd udpsvd
- 检查文件类型
>>> ls -l -h tcpsvd udpsvd
-rwxrwxr-x 1 alex alex 68K 5月 7 14:34 tcpsvd
-rwxrwxr-x 1 alex alex 64K 5月 7 14:34 udpsvd
>>> file tcpsvd udpsvd
tcpsvd: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.16, BuildID[sha1]=f334356e07bdeb77a5c75032eb6b13ec61aa8d55, stripped
udpsvd: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV), dynamically linked, interpreter /lib/ld.so.1, for GNU/Linux 2.6.16, BuildID[sha1]=8392472ff1b0e0de89881bea2b41144d5c9bd2d3, stripped