交叉编译Nginx(修正版)

Nginx是个高性能的http和反向代理服务器,应用非常广泛,使用C语言编写,故可以将其交叉编译,然后放到arm平台上使用,这样Nginx就可以在嵌入式linux里大放光彩。下面就讲述如何交叉编译Nginx。
一 准备

交叉编译平台:ubuntu16.04 64位
目标平台:arm 32位 (对于64位操作方法也是类似)

下载以下文件用于交叉编译:

    gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabi.tar.xz
    nginx-1.16.1.tar.gz
    openssl-1.1.1d.tar.gz
    pcre-8.43.zip
    zlib-1.2.11.tar.gz

对于交叉编译器,去linaro网站上去下载,版本不一定要求4.9.4,不要太旧就可以(尽量和交叉编译linux内核镜像的编译器一致)。如果目标板是64位,就选aarch64-linux-gnu去下载。


PS:上述文件也可以点击这里下载,nginx_related_免费高速下载|百度网盘-分享无限制

以上文件下载好后传到虚拟机里,然后分别解压



二 设置交叉编译器

 

把交叉编译器解压到一个不需要root权限的地方,这样以后操作会方便很多,可以像上面那样,和nginx它们放在同一个地方。尽量保证不使用root权限去编译。

使用以下命令去修改/etc/bash.bashrc,
sudo vim /etc/bash.bashrc
打开后在最后一行添加以下内容,

export PATH=/home/work/work/nginx_related/gcc-linaro-4.9.4/bin:$PATH
export CC=arm-linux-gnueabi-gcc
export CXX=arm-linux-gnueabi-g++
export LD=arm-linux-gnueabi-ld
export AR=arm-linux-gnueabi-ar
export RANLIB=arm-linux-gnueabi-ranlib
export STRIP=arm-linux-gnueabi-strip

注意,第一个export要根据自己的交叉编译器的实际位置去添加,还有不要添加CROSS_COMPILE和ARCH,否则后面还要去修改设置。

添加ok后保存关闭,然后输入以下命令进行更新,
source /etc/bash.bashrc

接着在终端下输入命令arm-linux-gnueabi-gcc -v验证设置交叉编译器是否成功,如果成功会打印版本信息,如下

 

以上内容可以不用配置,如果用第三方交叉编译工具,直接解压指定文件夹解压即可,

然后下面使用的时候在临时中断,导出环境变量,或者执行环境配置脚本,自动将当前

$CC设置成交叉编译的gcc

正式开始!

三 配置nginx

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

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



 2 打开auto/cc/conf,把82行的gcc修改为arm-linux-gnueabi-gcc



    3 打开auto/types/sizeof,把ngx_size设置为4 (32位目标平台是4,64位的话是8),



   4 并把编译器的自检注释掉,使用#号进行注释

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



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



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



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



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



    打开src/os/unix/ngx_udp_sendmsg_chain.c,把判断NGX_HAVE_INET6的地方都注释掉,和第9步一样

以上修改好后,在nginx-1.16.1目录下执行下面的命令进行配置,

./configure --prefix=/home/vmuser/install --with-pcre=../pcre-8.43 --with-openssl=../openssl-1.1.1d --with-zlib=../zlib-1.2.11

–prefix是用来指定Nginx的安装路径,注意要根据自己的实际情况来指定位置,尽量不要放到需要root权限的目录下。


四 实际测试不需要修改Nginx的Makefile,默认生成即可。

五 编译和安装

回到nginx-1.16.1目录下,然后执行make & make install进行整体编译和安装,ok后,可以在myNginx目录下看到如下内容,



在sbin下有nginx的elf文件,使用file命令查看其运行平台,



可以看出是ARM平台,此时,就可以把myNginx整个目录拷贝到目标板上去运行了。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Nginx是一个开源的高性能Web服务器和反向代理服务器,常用于构建动态网站、负载均衡以及缓存等应用场景。交叉编译是指在一台主机上编译生成能够在另一种平台上运行的可执行文件。下面是关于Nginx交叉编译的一些详细信息。 交叉编译Nginx有以下几个步骤: 1. 准备交叉编译工具链:由于编译目标平台与主机平台不一致,需要准备交叉编译工具链。工具链是由交叉编译器、库文件以及其他工具组成的集合,用于在主机上编译生成目标平台的可执行文件。根据目标平台的不同,可以使用不同的交叉编译工具链。 2. 配置Nginx的编译选项:在进行交叉编译之前,需要根据目标平台的需求来配置Nginx的编译选项。这些选项包括目标平台的体系结构、操作系统、编译器等信息。 3. 执行交叉编译命令:在完成工具链的准备和Nginx的配置后,可以执行交叉编译命令来生成目标平台上运行的Nginx可执行文件。交叉编译命令一般会使用到之前准备的交叉编译工具链。 4. 测试和部署:在成功编译生成Nginx可执行文件后,可以在目标平台上进行测试和部署。测试可以验证编译生成的Nginx是否能够在目标平台上正常运行,部署则是将编译生成的Nginx安装到目标平台的指定位置,以便进行实际的应用。 总之,通过交叉编译可以在一台主机上为不同的目标平台生成可执行文件,这为Nginx在不同平台上的部署和使用提供了便利。交叉编译Nginx需要准备交叉编译工具链、配置编译选项,然后执行交叉编译命令来生成目标平台上可运行的Nginx文件。最后,可以在目标平台上进行测试和部署。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值