ubuntu18.04下交叉编译 nginx源码(支持推送H265的rtmp和http-flv)
- 适合在aarch64-linux-gnu平台下的交叉编译
- 一、源码下载准备
- 二、执行configure
- 三、解决执行configure时遇到的出错问题
- 1、checking for C compiler ... found but is not working
- 2、error: can not detect int size
- 四、configure执行成功
- 五、执行make前准备工作
- 1、修改configure后生成的Makefile
- 六、make过程中出错解决
- 1、遇到openssl编译出错
- 2、遇到'NGX SYS NERR'未声明的出错
- 七、make执行成功
- 八、下载
适合在aarch64-linux-gnu平台下的交叉编译
一、源码下载准备
下载以下源码,官方下载路径就不提供了,可以直接用我提供的
分别解压以下源码,放在同个目录下/opt/nginx_rar/
nginx-1.18.0-code.tar.gz
nginx-http-flv-module-master-h265.zip
openssl-1.1.1f.tar.gz
pcre-8.44.zip
zlib-1.2.11.tar.gz
二、执行configure
先进入nginx-1.18.0-code/nginx-f8052414dbe9/auto把configure文件拷贝到nginx-f8052414dbe9目录下,再回到nginx-f8052414dbe9目录执行以下命令。
./configure --with-cc=/usr/local/ARM-toolchain/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc --with-cpp=/usr/local/ARM-toolchain/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ --prefix=/usr/local/nginx --without-http_gzip_module --with-http_ssl_module --without-http_upstream_zone_module --with-http_auth_request_module --add-module=/opt/nginx_rar/nginx-http-flv-module-master --with-pcre=/opt/nginx_rar/pcre-8.44 --with-zlib=/opt/nginx_rar/zlib-1.2.11 --with-openssl=/opt/nginx_rar/openssl-1.1.1f
注意:/usr/local/ARM-toolchain/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc为你交叉编译器所在的位置。
三、解决执行configure时遇到的出错问题
1、checking for C compiler … found but is not working
解决方法:
找到auto/cc/name文件并打开
找到如下代码
if [ $ngx_found = no ]; then
echo
echo $0: error: C compiler $CC is not found
echo
exit 1
fi
把exit 1 注释掉
2、error: can not detect int size
解决方法:
找到auto/types/sizeof文件并打开
找到如下代码
if [ -x $NGX_AUTOTEST ]; then
ngx_size=`$NGX_AUTOTEST`
echo " $ngx_size bytes"
fi
改成
if [ -x $NGX_AUTOTEST ]; then
ngx_size=8
echo " $ngx_size bytes"
fi
四、configure执行成功
解决完上面两处报错后,继续执行configure命令,看到如下画面即执行成功configure。
五、执行make前准备工作
1、修改configure后生成的Makefile
找到objs/底下的Makefile文件,打开后找到如下两处地方,修改成跟如下一样即可开始执行make
六、make过程中出错解决
1、遇到openssl编译出错
解决方法:
去到openssl-1.1.1f源码目录下找到Makefile并打开,搜索m64,有两处,都删除掉,其中有一行整行删除,注意:然后直接在openssl-1.1.1f源码目录下执行make和make install,都成功后回到nginx源码目录继续执行之前未执行完的make。
2、遇到’NGX SYS NERR’未声明的出错
解决方法:
找到objs/目录底下的ngx_auto_config.h文件并打开,到文件末尾增加如下代码后继续执行make
七、make执行成功
执行make install
到此,你已经成功编译出nginx(在/usr/local/目录下)
八、下载
源码和编译成功后的可执行nginx