nginx交叉编译 - arm平台

1、准备工作

1.1交叉编译zlib

//第一步、构建
./configure --prefix=/home/liu/lib --static

//第二步、修改makefile文件(由于在configure中不支持指定编译链,故需要手动修改makefile文件)
CC=arm-linux-gnueabihf-gcc
AR=arm-linux-gnueabihf-ar
RANLIB=arm-linux-gnueabihf-ranlib

//第三步、编译
make

//第四步、安装
make install

1.2交叉编译pcre

//构建
./configure --host=arm-linux-gnueabihf --prefix=/mnt/nginx/ --enable-static --disable-shared CC=arm-linux-gnueabihf-gcc

//编译
make

//安装
make install

2、nginx交叉编译

2.1下载地址

链接

2.2修改nginx配置文件

	由于nginx本身并不支持交叉编译,所以在进行交叉编译之前要对其文件进行修改,下面以nginx 1.19.1为例(进入nginx-1.19.1文件夹)。

2.2.1 打开configure文件,注释掉下面三行语句,如下图:

在这里插入图片描述

2.2.2 打开auto/cc/conf,把第82行的gcc修改为对应的编译链arm-linux-gnueabi-gcc,如下图:

在这里插入图片描述

2.2.3 打开auto/types/sizeof,把ngx_size设置为4(说明:32位目标平台是4,64位目标平台是8),如下图:

在这里插入图片描述
并把编译器的自检注释掉,使用#号进行注释,如下图:
在这里插入图片描述

2.2.4 打开auto/feature,注释掉ngx自检,如下图中标红的行:

在这里插入图片描述

2.2.5 打开src/os/unix/ngx_time.h,添加time.h头文件,如下图:

在这里插入图片描述

2.2.6 打开src/os/unix/ngx_errno.h,添加NGX_SYS_NERR的宏定义,如下图:

在这里插入图片描述

2.2.7 打开src/event/ngx_event_accept.c,打开_GNU_SOURCE,使能accept4(),如下图:

在这里插入图片描述

2.2.8 打开src/event/ngx_event_udp.c,把判断NGX_HAVE_INET6的地方都注释掉,如下图:

下面是其中一处,我们用不到ipv6
在这里插入图片描述

2.2.9 打开src/os/unix/ngx_udp_sendmsg_chain.c,把判断NGX_HAVE_INET6的地方都注释掉,和2.2.8操作一样。

3、构建并编译nginx

3.1 执行configure指令

以上文件都修改完成后,在nginx-1.19.1目录下执行下面的命令

//配置交叉编译环境
export CC=arm-linux-gnueabihf-gcc
export CXX=arm-linux-gnueabihf-g++
export LD=arm-linux-gnueabihf-ld
export AR=arm-linux-gnueabihf-ar
export RANLIB=arm-linux-gnueabihf-ranlib
export STRIP=arm-linux-gnueabihf-strip

//执行构建指令
./configure --prefix=/home/cbliu/nginx/1.19.1 --with-pcre=/home/cbliu/nginx/pcre-8.39 --with-openssl=/home/cbliu/nginx/openssl-1.0.2p --with-zlib=/home/cbliu/nginx/zlib-1.2.11

./configure --prefix=/mnt/nginx/1.19.1 --with-pcre=/mnt/nginx/pcre-8.39 --with-openssl=/mnt/nginx/openssl-1.0.2p --with-zlib=/mnt/nginx/zlib-1.2.11

说明:
–prefix是用来指定nginx的安装路径,注意要根据自己的实际情况来指定位置,尽量不要放到需要root权限的目录下。–with-pcre是用来指定pcre第三方库的路径。–with-openssl是用来指定openssl第三方库的路径。–with-zlib是用来指定zlib库的安装路径。

3.2 修改objs/makefile文件

configure成功后,会产生objs/Makefile文件,打开这个文件进行编辑修改,刚打开如下图:
在这里插入图片描述
调整后如下:

CC =	arm-linux-gnueabihf-gcc
CFLAGS = -pipe  -O -W -Wall -Wpointer-arith -Wno-unused-parameter -Werror -g 
CPP =	arm-linux-gnueabihf-gcc -E
LINK =	$(CC)

说明:
CFLAGS的值是正常编译nginx时生成的,即目标平台是x86,因为nginx我们配置了交叉编译,就导致CFLAGS的值为空,所以这里把正常编译生成的cflags加过来就可以了。

3.3 在Makefile中配置pcre[可选项]

在Makefile里搜索pcre,如下,在后面加上–host=arm-linux-gnueabihf,表示要进行交叉编译,如下图:
在这里插入图片描述

4、问题

4.1 启动nginx时提示没有或无法打开错误日志文件

问题:
在这里插入图片描述
解决办法:
进入到对应的目录发现没有nginx这个文件夹,以前启动的时候没有问题,这次关闭nginx后再启动/var/log/nginx这个文件夹都不见了,需要创建对应的目录,以及error.log文件,然后再次启动就没有问题了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值