nginx自身对交叉编译支持不是很好,所以在移植过程中会遇到很多问题,总结了我遇到的两个问题,分享给大家。
nginx 交叉编译用到的变量:
BUILD_PATH=$PWD
INSTALL_PATH=$PWD/install
CC_PATH=/home/ubuntu/xxx/bin/xxx-xxx-gcc
CPP_PATH=/home/ubuntu/xxx/bin/xxx-xxx-g
CONFIG_DIR=/app/nginx
LOG_DIR=/app/nginx/log
TEMP_DIR=/app/nginx/tmp
执行交叉编译:
(1)./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_gzip_module
--with-cc=$CC_PATH
--with-cpp=$CPP_PATH
(2)make&& make install
坑1:
checking for C compiler ... found but is not working
./configure error : C compiler gcc is not found
(1)分析:
configure首先会编译一个小测试程序,通过测试其运行结果来判断编译器是否能正常工作,由于交叉编译器所编译出的程序是无法在编译主机上运行的,故而产生此错误。
(2)解决办法:
编辑auto/cc/name文件,将21行的“exit 1”注释掉(令测试程序不会报错)
坑2:
./configure : error:can not detect int size
(1) 分析:
configure通过运行测试程序来获得“int、long、longlong”等数据类型的大小,由于交叉编译器所编译出的程序无法在编译主机上运行而产生错误
(2) 解决方法:
编辑auto/types/sizeof文件,大概36行的位置($CC 改为gcc),ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS"改为ngx_test="gcc $CC_TEST_FLAGS $CC_AUX_FLAGS