nginx交叉编译移植遇到的坑

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

本文分享自微信公众号 - nginx遇上redis(GGame_over_the_world)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券