Ngnix的交叉编译在32位的arm上运行

1,335 阅读2分钟

一.下载以下文件用于交叉编译

> gcc-linaro-arm-linux-gnueabihf.tar.xz
> openssl-1.0.2l.tar.gz (可选)
> pcre-8.43.zip (可选)
> zlib-1.2.11.tar.gz(可选)
> 工具 autoconf-2.69.tar.gz
> 工具 automake-1.13.3.tar.gz
> nginx-1.19.1

二.配置gcc-linaro-arm-linux-gnueabihf

1.解压tar.xz包到/usr/local/
2.sudo vi /etc/profile
3.打开后在最后一行添加以下内容

4.source /etc/profile
5.验证 aarm-linux-gnueabihf-gcc -v

三.交叉编译ngnix的以上依赖项

> CC=arm-linux-gnueabihf-gcc AR=arm-linux-gnueabihf-ar RANLIB=arm-linux-gnueabihf-ranlib AS=arm-linux-gnueabihf-as LD=arm-linux-gnueabihf-ld NM=arm-linux-gnueabihf-nm ./configure --host=arm-linux --prefix=/home/bixiao/arm-linux-gnueabihf
> make && make install

四.配置nginx

nginx本身是不支持交叉编译的,所以需要对其进行一定的修改。主要按照如下步骤进行修改,

1.进入nginx-1.19.1目录
2.打开configure文件,注释掉已下三行语句

3.打开auto/cc/conf,把82行的gcc修改为arm-linux-gnueabihf-gcc

4.打开auto/types/sizeof,把ngx_size设置为432位目标平台是464位的话是8

5.打开auto/types/sizeof,并把编译器的自检注释掉,使用#号进行注释

6.打开auto/feature,注释掉ngx自检,如下标红的行

7.打开src/os/unix/ngx_time.h,添加time.h头文件

8.打开src/os/unix/ngx_errno.h,添加NGX_SYS_NERR的宏定义

9.打开src/event/ngx_event_accept.c,打开_GNU_SOURCE,使能accept4()

10.打开src/event/ngx_event_udp.c,把判断NGX_HAVE_INET6的地方都注释掉,下面是其中一处,我们用不到ipv6

11.打开src/os/unix/ngx_udp_sendmsg_chain.c,把判断NGX_HAVE_INET6的地方都注释掉,和第9步一样
12.以上修改好后,在nginx-1.19.1目录下执行下面的命令进行配置
./configure --with-pcre=../pcre-8.43 --with-openssl=../openssl-1.0.2l --with-zlib=../zlib-1.2.11 --prefix=/usr/local/arm-linux-gnueabihf-4.9-install/nginx-1.19.1 --with-http_stub_status_module --with-http_ssl_module   
//ngix带ssl功能

五.修改Nginx的Makefile

1.configure成功后,会产生objs/Makefile,打开这个文件进行修改,修改如下:

六.编译和安装

1.回到nginx-1.19.1目录下,然后执行make & make install进行整体编译和安装,可以在/usr/loacl/nginx-1.91.目录下看到:

2.执行 file /sbin/nginx