首先下载好下面三个源码包
nginx-1.8.0.tar.gz
pcre-8.37.tar.gz
openssl-1.0.0e.tar.gz
解压 nginx-1.8.0.tar.gz
设置环境变量
BUILD_PATH=$PWD
INSTALL_PATH=$PWD/install
CC_PATH=/opt/buildroot-gcc342/bin/mipsel-linux-gcc
CPP_PATH=/opt/buildroot-gcc342/bin/mipsel-linux-g++
CONFIG_DIR=/app/nginx
LOG_DIR=/app/nginx/log
TEMP_DIR=/app/nginx/tmp
其中 CC_PATH CPP_PATH 是交叉工具链的路径。
./configure --prefix=$INSTALL_PATH--builddir=$BUILD_PATH/build --conf-path=$CONFIG_DIR/nginx.conf --error-log-path=$LOG_DIR/error.log --pid-path=$CONFIG_DIR/nginx.pid --lock-path=$CONFIG_DIR/nginx.lock --http-log-path=$LOG_DIR/access.log --http-client-body-temp-path=$TEMP_DIR/body --http-proxy-temp-path=$TEMP_DIR/proxy --http-fastcgi-temp-path=$TEMP_DIR/fastcgi --without-http_uwsgi_module --without-http_scgi_module --without-http_gzip_module --with-http_ssl_module --with-pcre=/home/ubuntu/packets/pcre-6.7 --with-openssl=/home/ubuntu/packets/openssl-1.0.1i --with-cc=$CC_PATH --with-cpp=$CPP_PATH --with-cc-opt="-I /opt/buildroot-gcc342/include" --with-ld-opt="-L /opt/buildroot-gcc342/lib" --with-pcre=/work/src/nginx/pcre-8.37 --with-openssl=/work/src/openssl-1.0.0e
其中
--with-cc-opt="-I /opt/buildroot-gcc342/include" --with-ld-opt="-L /opt/buildroot-gcc342/lib"
是交叉工具链的include lib路径。
--with-pcre=/work/src/nginx/pcre-8.37 --with-openssl=/work/src/openssl-1.0.0e
是解压后 pcre openssl 的路径
执行完上面的命令后可能会遇到问题,
此外还有一些问题是上面的文章没有提到的
修改 objs/Makefile
/work/src/nginx/pcre-8.37/Makefile: objs/Makefile
cd /work/src/nginx/pcre-8.37 \
&& if [ -f Makefile ]; then $(MAKE) distclean; fi \
&& CC="$(CC)" CFLAGS="-O2 -fomit-frame-pointer -pipe " \
./configure --disable-shared --prefix=/work/src/nginx/pcre-8.37/tmp --host=mipsel-linux --build=i686-linux
/work/src/nginx/pcre-8.37/.libs/libpcre.a: /work/src/nginx/pcre-8.37/Makefile
cd /work/src/nginx/pcre-8.37 \
&& $(MAKE) libpcre.la
/work/src/openssl-1.0.0e/include/openssl/ssl.h: objs/Makefile
cd /work/src/openssl-1.0.0e \
&& if [ -f Makefile ]; then $(MAKE) clean; fi \
&& ./config no-asm --prefix=/work/src/openssl-1.0.0e/.openssl no-shared \
$(MAKE) \
&& $(MAKE) install LIBDIR=lib
主要是对 pcre 和openssl 的编译配置进行修改,使其执行交叉编译。 ./config
完成上面的修改后,执行 make
但是make的过程中会发现编译 openssl 是采用gcc工具链。而不是mipsel-linux-gcc
于是,我们打开 openssl源码中的 Makefile。将 cc 修改成 mipsel-linux-gcc。
再次修改 objs/Makefile
把
&& ./config no-asm --prefix=/work/src/openssl-1.0.0e/.openssl no-shared
注释掉,因为你再次make的时候,还是会重新生成 openssl 的Makefile,这样我们刚才的修改的文件就会被覆盖了,依旧会是gcc 编译。
至此,
执行make
make install
过程中会报一个警告:
warning: implicit declaration of function `posix_fadvise'
修改 objs/ngx_auto_config.h
添加下面语句
#ifndef NGX_HAVE_SYSVSHM
#define NGX_HAVE_SYSVSHM 1
#endif
#ifndef NGX_SYS_NERR
#define NGX_SYS_NERR 132
#endif
同时注释下面的语句
//#ifndef NGX_HAVE_POSIX_FADVISE
//#define NGX_HAVE_POSIX_FADVISE 1
//#endif