一、首先需要一下材料,并解压。
源码包: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=`
CC⇒ngxtest="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 to
ngx_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内容请搜索靠谱客的其他文章。
发表评论 取消回复