nginx交叉编译移植遇到的坑

2019-10-23 19:37:25 浏览数 (1)

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

0 人点赞