我是靠谱客的博主 坚强枫叶,这篇文章主要介绍交叉编译Nginx,并移植到Hi3519上运行,现在分享给大家,希望可以做个参考。

一、首先需要一下材料,并解压。
源码包:https://download.csdn.net/download/weixin_43793181/20324052

编译好的工程文件与生成文件:https://download.csdn.net/download/weixin_43793181/18445438在这里插入图片描述

二、进入nginx-1.18.0目录下,运行configure

cd  nginx-1.18.0
./configure --with-cc=arm-himix200-linux-gcc --with-cpp=arm-himix200-linux-g++ --prefix=/home/jiajia/Nginx/Mynginx --with-pcre=../pcre-8.44 --with-openssl=../openssl-1.1.0l --with-zlib=../zlib-1.2.11 --add-module=../nginx-rtmp-module

其中,本次编译用到的是arm-himix200-linux-的交叉编译工具链
–prefix对应的是生成文件存放的目录位置;
–with-pcre对应的是pcre库的绝对路径与版本号;
–with-openssl对应的是openssl库的绝对路径与版本号;
–with-zlib对应的是zlib库的绝对路径与版本号;
–add-module对应的是nginx-rtmp-module库的绝对路径,使用RTMP必须加入这个模块进行编译;

-----------------------分割线 问题1-----------------------
**问题一:**执行命令后,出现以下错误提示:
./configure: error: C compiler arm-himix200-linux-gcc is not found
在这里插入图片描述
解决:

vi auto/cc/name

(1)ngx_feature_run=yes ==> ngx_feature_run=no
保存修改并退出,如下图:
在这里插入图片描述在这里插入图片描述
再次执行configure

./configure --with-cc=arm-himix200-linux-gcc --with-cpp=arm-himix200-linux-g++ --prefix=/home/jiajia/Nginx/Mynginx --with-pcre=../pcre-8.44 --with-openssl=../openssl-1.1.0l --with-zlib=../zlib-1.2.11 --add-module=../nginx-rtmp-module


-----------------------分割线 问题2-----------------------
**问题二:**执行命令后,出现以下错误提示:
./configure: error: can not detect int size
在这里插入图片描述
解决:

vi auto/types/sizeof

(1)ngx_test=" C C ⇒ n g x t e s t = " g c c ( 2 ) n g x s i z e = ‘ CC ⇒ ngx_test="gcc (2)ngx_size=` CCngxtest="gcc(2)ngxsize=NGX_AUTOTEST` ⇒ ngx_size=4
修改ngx_test、ngx_size中参数,如下图
在这里插入图片描述
在这里插入图片描述
保存修改并退出,再次执行configure

./configure --with-cc=arm-himix200-linux-gcc --with-cpp=arm-himix200-linux-g++ --prefix=/home/jiajia/Nginx/Mynginx --with-pcre=../pcre-8.44 --with-openssl=../openssl-1.1.0l --with-zlib=../zlib-1.2.11 --add-module=../nginx-rtmp-module

执行命令出现下图信息,表示configure配置完成,则可进行下一步,有些伙伴则会出现问题三
在这里插入图片描述


-----------------------分割线 问题3-----------------------
**问题三:**执行命令后,出现以下错误提示:
configure: error: cannot run C compiled programs.
If you meant to cross compile, use `–host’.
在这里插入图片描述

解决:

vi auto/options

(1)PCRE_CONF_OPT=  ⇒ PCRE_CONF_OPT=–host=arm-himix200-linux //加入自己的交叉工具链
在这里插入图片描述
在这里插入图片描述

保存修改并退出,重新进行configure配置

./configure --with-cc=arm-himix200-linux-gcc --with-cpp=arm-himix200-linux-g++ --prefix=/home/jiajia/Nginx/Mynginx --with-pcre=../pcre-8.44 --with-openssl=../openssl-1.1.0l --with-zlib=../zlib-1.2.11 --add-module=../nginx-rtmp-module


三、开始进行编译

make

有些伙伴到这一步才出现上面提到的问题三,那就回到上面进行修改操作。


-----------------------分割线 问题4-----------------------
**问题四:**执行命令后,出现以下错误提示:
error: #error ngx_atomic_cmp_set() is not defined!
#error ngx_atomic_cmp_set() is not defined!
在这里插入图片描述
解决:
在configure配置的时候加上 --without-http_upstream_zone_module

./configure --with-cc=arm-himix200-linux-gcc --with-cpp=arm-himix200-linux-g++ --prefix=/home/jiajia/Nginx/Mynginx --with-pcre=../pcre-8.44 --with-openssl=../openssl-1.1.0l --with-zlib=../zlib-1.2.11 --add-module=../nginx-rtmp-module --without-http_upstream_zone_module
make


-----------------------分割线 问题5-----------------------
**问题五:**执行命令后,出现以下错误提示:
…/openssl-1.1.0l/.openssl/lib/libssl.a: error adding symbols: File format not recognized
collect2: error: ld returned 1 exit status
error: ‘NGX_SYS_NERR’ undeclared (first use in this function)
msg = ((ngx_uint_t) err < NGX_SYS_NERR) ? &ngx_sys_errlist[err]:
在这里插入图片描述
解决:

vi objs/ngx_auto_config.h

往文件中加入

#ifndef NGX_SYS_NERR
#define NGX_SYS_NERR  132
#endif

保存修改并退出

make


-----------------------分割线 问题6-----------------------
**问题六:**执行命令后,出现以下错误提示:
…/openssl-1.1.0l/.openssl/lib/libssl.a: error adding symbols: File format not recognized
collect2: error: ld returned 1 exit status
在这里插入图片描述

解决:

vi auto/lib/openssl/make

(1)./config ⇒ ./Configure
(2)$OPENSSL_OPT ⇒ --cross-compile-prefix=arm-himix200-linux- linux-generic32
在这里插入图片描述
在这里插入图片描述
保存修改并退出

./configure --with-cc=arm-himix200-linux-gcc --with-cpp=arm-himix200-linux-g++ --prefix=/home/jiajia/Nginx/Mynginx --with-pcre=../pcre-8.44 --with-openssl=../openssl-1.1.0l --with-zlib=../zlib-1.2.11 --add-module=../nginx-rtmp-module --without-http_upstream_zone_module
make


-----------------------分割线 问题7-----------------------
**问题七:**执行命令后,出现以下错误提示:
/home/jiajia/Nginx/nginx-1.18.0/src/core/ngx_cycle.c:476: undefined reference to ngx_shm_alloc' /home/jiajia/Nginx/nginx-1.18.0/src/core/ngx_cycle.c:685: undefined reference tongx_shm_free’
/home/jiajia/Nginx/nginx-1.18.0/src/core/ngx_cycle.c:902: undefined reference to `ngx_shm_free’

在这里插入图片描述
解决:

vi objs/ngx_auto_config.h

往文件中加入

#ifndef NGX_HAVE_SYSVSHM
#define NGX_HAVE_SYSVSHM 1
#endif

保存修改并退出

make


-----------------------分割线 问题8-----------------------
**问题八:**执行命令后,出现以下错误提示:
fatal error: ngx_http_client.h: No such file or directory
在这里插入图片描述
可能就是nginx-rtmp-module库出现问题了。

-------------------------分割线------------------------
当出现下图字符,恭喜你编译通过了。
在这里插入图片描述
终端输入以下命令行,生成文件即将存放到–prefix对应目录位置

make install

在这里插入图片描述

将Mynginx整个目录拷贝到Hi3519开发板上
在/Mynginx/conf/nginx.conf文件末尾加入如下配置信息:

rtmp {
        server {
                listen 1935;
                chunk_size 4096;
                # vod path
                application vod {
                        play /opt/public/test_files;
                }
                application live {
                        live on;
                }
                application hls {
                        live on;
                        hls on;
                        hls_path /opt/public/test_files;
                        hls_fragment 1s;
                }
        }
}

执行命令启动服务器:

./sbin/nginx -p ./

出现问题,报错信息如下:
nginx: [emerg] getgrnam(“nogroup”) failed
在这里插入图片描述
解决:

vi conf/nginx.conf

(1)#user nobody ==> user root
在这里插入图片描述
在这里插入图片描述
保存修改并退出
执行命令启动服务器,并查看关于nginx的进程

./sbin/nginx -p ./
ps aux | grep nginx

在这里插入图片描述
恭喜你,nginx服务器已交叉编译并移植成功。

Hi3519作为nginx服务器的同时,从Hi3519上推流到nginx服务器,出现通信握手失败导致段错误问题
终端输入ifconfig,查看本地环回是否开启(127.0.0.1)
在这里插入图片描述
本地环回开启方式:

ifconfig lo up

完结,撒花!!!

源码包:https://download.csdn.net/download/weixin_43793181/20324052

编译好的工程文件与生成文件:https://download.csdn.net/download/weixin_43793181/18445438

最后

以上就是坚强枫叶最近收集整理的关于交叉编译Nginx,并移植到Hi3519上运行的全部内容,更多相关交叉编译Nginx内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部