nginx 交叉编译移植海思芯片

前期安装准备

1:nginx安装程序

版本:nginx-1.16.1(版本最好新一点)
官网地址:http://nginx.org/en/download.html

2:OpenSSL模块

版本:openssl-1.1.0i
地址:https://www.openssl.org/

3:Pcre模块

版本:pcre-8.43
地址:http://www.pcre.org/

4:Zlib模块

版本:zlib-1.2.11
地址:http://www.zlib.net/

5:nginx-rtmp-module模块

支持rtmp和hls转发
地址:https://github.com/arut/nginx-rtmp-module

6:nginx-http-flv-module模块

支持http-flv方式直播
地址:https://github.com/winshining/nginx-http-flv-module

7:准备工作参考

nginx-rtmp-module和nginx-http-flv-module两者只需要其中之一就可以,不需要联合编译。
地址:https://blog.csdn.net/l1028386804/article/details/80022437作者对相关的准备写的很齐全。

编译

./configure --with-http_ssl_module --with-cc=arm-hisiv400-linux-gcc 	--with-cpp=arm-hisiv400-linux-cpp --prefix=/home/yangjia/Nginx/test 	--with-pcre=./pcre-8.43 --with-openssl=./openssl-1.1.0i --with-zlib=./zlib-1.2.11 	--add-module=./nginx-rtmp-module-master --without-http_gzip_module 	--without-http_upstream_zone_module

configure错误信息调整

1.错误信息:./configure: error: C compiler arm-hisiv400-linux-gcc is not found

这是因为nginx编译的时候除了检查cc是否存在,还需要执行编译后的程序。很明显交叉编译的程序无法执行。
解决方法:vi auto/cc/name

ngx_feature_run=yes  ==> ngx_feature_run=no
2.错误信息:./configure: error: can not detect int size

解决方法:vi auto/types/sizeof

ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS \  ==> ngx_test="gcc $CC_TEST_FLAGS $CC_AUX_FLAG \
	if [ -x $NGX_AUTOTEST ]; then``
	ngx_size=`$NGX_AUTOTEST`  ==>  ngx_size=4
3.错误信息:  configure: error: in `/home/src/pcre-8.42': configure: error: C compiler cannot create executables

解决方法:vi auto/options

 PCRE_CONF_OPT=--host=arm-hisiv400-linux
注意:以上三个错误调整完重新configure

Make过程调整

1.错误信息:error: ‘NGX_SYS_NERR’ undeclared (first use in this function)

解决方法:vi objs/ngx_auto_config.h

添加:  #ifndef NGX_SYS_NERR
		#define NGX_SYS_NERR  132
		#endif
2.错误信息:error: ld returned 1 exit status

解决方法:vi auto/lib/openssl/make

&& ./config --prefix=$ngx_prefix no-shared no-threads $OPENSSL_OPT \
改为
&& ./Configure --prefix=$ngx_prefix no-shared no-threads --cross-compile-prefix=arm-hisiv400-linux- linux-generic32\

注意:此错误修改完成之后重新configure之后再make之后重复1步骤。

3.错误信息: undefined reference to 'ngx_shm_alloc'

解决方法:vi objs.nginx_auto_config.h

添加:  #ifndef NGX_HAVE_SYSVSHM
		#define NGX_HAVE_SYSVSHM 1
		#endif

完成上述之后make install即可。

nginx的rtmp模块编写

rtmp {

    server {
        listen 0.0.0.0:1935;
        chunk_size 4000;
        access_log /dev/null;// 关闭log

        application videolive {
            live on;
            allow publish all;
            allow play all;
            on_play http://127.0.0.1/rtmplivevideo;
            on_play_done http://127.0.0.1/rtmpstopvideo;
            gop_cache on;//nginx-http-flv-module模块用来减少第一帧加载时间
        }
		application videolive2 
		{
			...
		}
		...
		

nginx运行

/xxx/xxx/nginx/sbin/nginx -c /xxx/xxx/nginx/conf/nginx.conf/ -p /xxx/xxx/nginx
/xxx/xxx/为nginx的安装位置。
Nginx是一款高性能的开源Web服务器软件,交叉编译移植Nginx指的是将Nginx源代码在一种平台上编译生成可在另一种不同平台上运行的可执行文件。 交叉编译是指在一种架构的计算机上进行编译,生成能够运行在另一种不同架构的计算机上的可执行文件。Nginx支持在各种不同的操作系统和架构上运行,可以进行交叉编译以适配不同的目标平台。交叉编译需要使用交叉工具链,该工具链包含相应平台的编译器、链接器和库等。 移植是指将软件从一个平台迁移到另一个平台,使之可以在目标平台上正常运行。Nginx移植的过程通常包括修改源代码,以兼容目标平台的操作系统、硬件和库。移植还需要考虑目标平台的性能特点和限制,并作出相应的优化和适配。 在进行Nginx交叉编译移植时,我们首先需要了解目标平台的硬件架构和操作系统类型,并准备相应的交叉工具链。然后,根据目标平台的特点,可以选择修改Nginx的源代码,以确保其能够在目标平台上正确运行。这可能包括调整参数、适配库和文件路径等。 接下来,我们需要使用交叉工具链进行编译,并生成能够在目标平台上运行的可执行文件。编译过程中需要指定目标平台的架构和操作系统类型,以及相应的编译选项。 最后,将生成的可执行文件和所需的依赖文件,如配置文件、库文件等,一同移植到目标平台上。在移植过程中需要注意文件路径、依赖关系和权限等问题,确保在目标平台上能够正确运行Nginx。 总的来说,Nginx交叉编译移植过程需要对目标平台的硬件和操作系统进行了解,并通过修改源代码和使用交叉工具链等方式,将Nginx适配到目标平台上。这样才能确保Nginx在各种不同的平台上都能够高效稳定地运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值