前言 静态交叉编译教程,本文以SS为例。
配置编译环境 安装需要软件 1 apt-get install -y build-essential autoconf autopoint automake git pkg-config
交叉编译工具 下载编译工具 以群晖为例,所有的交叉编译工具下载地址:https://sourceforge.net/projects/dsgpl/files/ 选择对应机型下载。
1 2 3 cd /mnt wget https://ncu.dl.sourceforge.net/project/dsgpl/DSM%206.1%20Tool%20Chains/Intel%20x86%20Linux%203.10.102%20%28Broadwell%29/broadwell-gcc493_glibc220_linaro_x86_64-GPL.txz tar Jxvf broadwell-gcc493_glibc220_linaro_x86_64-GPL.txz
自制编译工具 未完成。。。。。。
调整编译环境 自定义参数:MLIB
编译的目标处理器架构;TOOLCHAINDIR
交叉编译工具所在目录;TOOLCHAIN
交叉编译工具bin
目录所在目录;HOST
交叉编译工具名称。
1 2 3 4 5 6 7 8 MLIB=x86_64 TOOLCHAINDIR=/mnt TOOLCHAIN=$TOOLCHAINDIR/x86_64-pc-linux-gnu HOST=${MLIB}-pc-linux-gnu PATH_A=$PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games PATH=$TOOLCHAIN/bin:$PATH
完成后运行$HOST-gcc -v
;返回版本信息说明交叉编译工具配置正常。
创建编译目录 1 2 3 4 5 6 7 8 9 10 11 12 rm -rf /mnt/build/shadowsocks-$MLIB mkdir -p /mnt/build/shadowsocks-$MLIB && cd /mnt/build/shadowsocks-$MLIB BASE=`pwd` SRC=$BASE/src PREFIX=$BASE/local PRE=$BASE/lib mkdir -p $SRC $PRE $PREFIX PKG_CONFIG_PATH=$PRE/lib/pkgconfig/ LD_LIBRARY_PATH=$PRE/lib/
编译依赖库文件
mbedTLS
pcre
libsodium
libev
libudns
c-ares
注意:软件所需要的依赖库,请查看软件的文档得知。
mbedTLS 1 2 3 4 5 6 7 8 mkdir $SRC/mbedTLS && cd $SRC/mbedTLS ver=2.5.1 wget --no-check-certificate https://tls.mbed.org/download/mbedtls-$ver-gpl.tgz tar zxf mbedtls-$ver-gpl.tgz cd mbedtls-$ver CC=$HOST-gcc AR=$HOST-ar LD=$HOST-ld LDFLAGS=-static make DESTDIR=$PREFIX install
pcre 1 2 3 4 5 6 7 8 9 mkdir $SRC/pcre && cd $SRC/pcre ver=8.41 wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-$ver.tar.gz tar zxf pcre-$ver.tar.gz cd pcre-$ver ./configure --host=$HOST --prefix=$PREFIX --disable-shared --enable-utf8 --enable-unicode-properties make -j`nproc` && make install
libsodium 1 2 3 4 5 6 7 8 9 10 mkdir $SRC/libsodium && cd $SRC/libsodium ver=1.0.13 wget --no-check-certificate https://download.libsodium.org/libsodium/releases/libsodium-$ver.tar.gz tar zxf libsodium-$ver.tar.gz cd libsodium-$ver ./configure --host=$HOST --prefix=$PREFIX --disable-ssp --disable-shared make -j`nproc` && make install
libev 1 2 3 4 5 6 7 8 9 mkdir $SRC/libev && cd $SRC/libev ver=4.24 wget http://dist.schmorp.de/libev/libev-$ver.tar.gz tar zxf libev-$ver.tar.gz cd libev-$ver ./configure --host=$HOST --prefix=$PREFIX --disable-shared make -j`nproc` && make install
libudns 1 2 3 4 5 6 7 8 mkdir $SRC/libudns && cd $SRC/libudns git clone git://github.com/shadowsocks/libudns cd libudns ./autogen.sh ./configure --host=$HOST --prefix=$PREFIX make -j`nproc` && make install
c-ares 1 2 3 4 5 6 7 8 9 10 11 12 mkdir $SRC/c-ares && cd $SRC/c-ares ver=1.13.0 wget https://c-ares.haxx.se/download/c-ares-$ver.tar.gz tar zxvf c-ares-$ver.tar.gz cd c-ares-$ver sed -i 's#\[-\]#[1.13.0]#' configure.ac ./buildconf ./configure --prefix=$PREFIX --host=$HOST CC=$HOST-gcc --enable-shared=no --enable-static=yes make -j`nproc` && make install
编译软件
shadowsocks-libev
simple-obfs
shadowsocks-libev 1 2 3 4 5 6 7 8 9 10 11 12 13 mkdir $SRC/shadowsocks-libev && cd $SRC/shadowsocks-libev ver=3.1.0 git clone git://github.com/shadowsocks/shadowsocks-libev cd shadowsocks-libev git checkout v$ver -b v$ver git submodule init && git submodule update ./autogen.sh LIBS="-lpthread -lm" LDFLAGS="-Wl,-static -static -static-libgcc -L$PREFIX/lib" CFLAGS="-I$PREFIX/include" \ ./configure --host=$HOST --prefix=$PREFIX --disable-ssp --disable-documentation \ --with-mbedtls=$PREFIX --with-pcre=$PREFIX --with-sodium=$PREFIX make -j`nproc` && make install
simple-obfs 1 2 3 4 5 6 7 8 9 10 11 12 mkdir $SRC/simple-obfs && cd $SRC/simple-obfs ver=0.0.3 git clone https://github.com/shadowsocks/simple-obfs cd simple-obfs git checkout v$ver -b v$ver git submodule init && git submodule update ./autogen.sh LIBS="-lpthread -lm" LDFLAGS="-Wl,-static -static -static-libgcc -L$PREFIX/lib" CFLAGS="-I$PREFIX/include" \ ./configure --host=$HOST --prefix=$PREFIX --disable-ssp --disable-documentation make -j`nproc` && make install
去除符号表 1 2 3 4 5 cp $PREFIX/bin/ss-* $BASE cp $PREFIX/bin/obfs-* $BASE $HOST-strip $BASE/obfs-* $HOST-strip $BASE/ss-* cd $BASE
还原环境变量 1 2 3 4 PATH=$PATH_A echo echo "Done!"