在64位Ubuntu下面使用android NDK编译nginx

原创 2014年03月31日 19:21:11
前面做过很多次尝试,编译也通过了,但是去掉了很多glob和crypto的函数,导致运行的时候还是会出错,所以,本次按照正常方法,加全所有的函数,然后编译之后运行。
1)在工作目录下建立build目录
2)准备文件,
a) 下载openssl,wget wget http://www.openssl.org/source/openssl-1.0.1f.tar.gz tar
b) 下载nginx,wget http://nginx.org/download/nginx-1.5.9.tar.gz
c) 下载pcre,wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.34.tar.gz
d) 下载zlib,wget http://www.zlib.net/zlib-1.2.8.tar.gz
e) 下载下载nginx_mod_h264,wget http://h264.code-shop.com/download/nginx_mod_h264_streaming-2.2.7.tar.gz
f) 下载rtmp模组,git clone https://github.com/arut/nginx-rtmp-module

3) 编译openssl
a) tar tar xvf openssl-1.0.1f.tar.gz
b) cd openssl-1.0.1f
c) 使用如下的配置文件
--------------------------------my_configure_openssl.sh start here-----------------------------------------
#!/bin/sh
./config no-asm shared \
--prefix=/home/zangcf/nginx_ndk/build \
--------------------------------my_configure_openssl.sh end here-----------------------------------------
d) gedit Makefile,进入修改Makefile
    the first step) 找到所有的-m64,删除
    the sencond step)找到CC= gcc,替换为CC= /opt/android-toolchain/android-14/bin/arm-linux-androideabi-gcc
    the third step)找到AR= ar $(ARFLAGS) r,替换为AR= /opt/android-toolchain/android-14/bin/arm-linux-androideabi-ar $(ARFLAGS) r
    the fourth step)找到RANLIB= /usr/bin/ranlib,替换为RANLIB= /opt/android-toolchain/android-14/bin/arm-linux-androideabi-ranlib
    the fifth step)找到NM= nm,修改为NM= /opt/android-toolchain/android-14/bin/arm-linux-androideabi-gcc-nm
    the sixth step)找到MAKEDEPPROG= gcc,修改为MAKEDEPPROG= /opt/android-toolchain/android-14/bin/arm-linux-androideabi-gcc
e)cp Makefile Makefile.ok
f)执行make && make install

4) 编译pcre
a) tar xvf pcre-8.34.tar.gz
b) cd  xvf pcre-8.34
c) gedit my_configure_pcre.sh
-----------------------------------my_configure_pcre.sh start here------------------------------------------------
#!/bin/sh
./configure \
--host=arm-linux \
--prefix=/home/zangcf/nginx_ndk/build \
CC=/opt/android-toolchain/android-14/bin/arm-linux-androideabi-gcc \
CPP=/opt/android-toolchain/android-14/bin/arm-linux-androideabi-cpp \
AR=/opt/android-toolchain/android-14/bin/arm-linux-androideabi-ar \
AS=/opt/android-toolchain/android-14/bin/arm-linux-androideabi-as \
CXX=/opt/android-toolchain/android-14/bin/arm-linux-androideabi-g++ \
CXXCPP=/opt/android-toolchain/android-14/bin/arm-linux-androideabi-cpp
-----------------------------------my_configure_pcre.sh end here------------------------------------------------
d)chmod u+x my_configure_pcre.sh
e)./my_configure_pcre.sh
f)make && make install

5) 解压zlib
tar xvf zlib-1.2.8.tar.gz

6) 解压nginx_mod_h264

7)编译nginx
a)tar xvf nginx-1.5.9.tar.gz
b)cd nginx-1.5.9
c)gedit auto/cc/name
    if [ "$NGX_PLATFORM" != win32 ]; then

    ngx_feature="C compiler"
    ngx_feature_name=
    #ngx_feature_run=yes
    ngx_feature_run=no   ==>set to no to skip check
    ngx_feature_incs=
    ngx_feature_path=

d)gedit auto/types/sizeof
    ngx_test="$CC $CC_TEST_FLAGS $CC_AUX_FLAGS
    ==> ngx_test="gcc $CC_TEST_FLAGS $CC_AUX_FLAGS

e) gedit src/os/unix/ngx_errno.h
at line 15 add #define NGX_SYS_NERR 333

f) gedit src/os/unix/ngx_shmem.c
#if (NGX_HAVE_MAP_ANON) ==> #if (!NGX_HAVE_MAP_ANON)

g) gedit auto/lib/pcre/make
    ./configure --disable-shared $PCRE_CONF_OPT

修改为
    ./configure --disable-shared $PCRE_CONF_OPT \
--host=arm-linux \
--prefix=/home/zangcf/nginx_ndk/build \
CC=/opt/android-toolchain/android-14/bin/arm-linux-androideabi-gcc \
CPP=/opt/android-toolchain/android-14/bin/arm-linux-androideabi-cpp \
AR=/opt/android-toolchain/android-14/bin/arm-linux-androideabi-ar \
AS=/opt/android-toolchain/android-14/bin/arm-linux-androideabi-as \
CXX=/opt/android-toolchain/android-14/bin/arm-linux-androideabi-g++ \
CXXCPP=/opt/android-toolchain/android-14/bin/arm-linux-androideabi-cpp

h) gedit auto/lib/openssl/make
$OPENSSL/.openssl/include/openssl/ssl.h:    $NGX_MAKEFILE
    cd $OPENSSL \\
    && if [ -f Makefile ]; then \$(MAKE) clean; fi \\
    && ./config --prefix=$ngx_prefix no-shared $OPENSSL_OPT \\
    && \$(MAKE) \\
    && \$(MAKE) install LIBDIR=lib
修改为
$OPENSSL/.openssl/include/openssl/ssl.h:    $NGX_MAKEFILE
    cd $OPENSSL \\

i) 打开/home/zangcf/nginx_ndk/nginx_mod_h264_streaming-2.2.7/src/ngx_http_streaming_module.c,删除
 if (r->zero_in_uri)   {
    return NGX_DECLINED;  
 }


j) gedit my_configure_nginx.sh
-----------------------------------my_configure_nginx.sh start here------------------------------------------------
#!/bin/sh
BUILD_PATH=/home/zangcf/nginx_ndk/build
CC_PATH=/opt/android-toolchain/android-14/bin/arm-linux-androideabi-gcc
CPP_PATH=/opt/android-toolchain/android-14/bin/arm-linux-androideabi-g++
./configure \
  --prefix=$BUILD_PATH \
  --builddir=$BUILD_PATH \
  --with-zlib=/home/zangcf/nginx_ndk/zlib-1.2.8 \
  --with-pcre=/home/zangcf/nginx_ndk/pcre-8.34 \
  --with-pcre-jit \
  --with-cc=$CC_PATH  \
  --with-cpp=$CPP_PATH \
  --with-openssl=/home/zangcf/nginx_ndk/openssl-1.0.1f \
  --add-module=/home/zangcf/nginx_ndk/nginx_mod_h264_streaming-2.2.7 \
  --with-http_flv_module \
  --with-http_mp4_module \
  --add-module=/home/zangcf/nginx_ndk/nginx-rtmp-module
-----------------------------------my_configure_nginx.sh end here------------------------------------------------

k) gedit ../build/Makefile
注意这里使用的arm_linux_gcc版本必须是4.4.3以后的,之前的本本可能会出错。
   the first step)找到-I /home/zangcf/nginx_ndk/openssl-1.0.1f/.openssl/include \,替换为-I /home/zangcf/nginx_ndk/build/include/openssl \
   the second step)找到 /home/zangcf/nginx_ndk/openssl-1.0.1f/.openssl/include/openssl/ssl.h \,替换为/home/zangcf/nginx_ndk/build/include/openssl/ssl.h
   the third step)CFLAGS增加-I/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/usr/include和-I/home/zangcf/nginx_ndk/build/include
   the fourth step) CLAGS去掉 -Werror
   the fifth step) 找到/home/zangcf/nginx_ndk/pcre-8.34/.libs/libpcre.a /home/zangcf/nginx_ndk/openssl-1.0.1f/.openssl/lib/libssl.a,替换为/home/zangcf/nginx_ndk/build/lib/libssl.a
   the sixth step)找到/home/zangcf/nginx_ndk/openssl-1.0.1f/.openssl/lib/libcrypto.a,替换为/home/zangcf/nginx_ndk/build/lib/libcrypto.a
   the seventh step) 在链接目标文件增加libc的标准库地址/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/usr/lib/libcrypt.a和/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/sys-root/usr/lib/libc.a /home/zangcf/nginx_ndk/build/lib/libpcre.a
   the eight step ) 找到/home/zangcf/nginx_ndk/pcre-8.34/.libs/libpcre.a,替换为/home/zangcf/nginx_ndk/build/lib/libpcre.a
这里如果集成Makefile还有找不到的文件,需要指定链接过程,类似做法如上。
l) make && make install
大工告成   



拥抱Android:编译nginx搭建移动平台

Android NDK编译Nginx 1.9.5, 1.10.2。 脚本可以从github上获得:https://github.com/dna2github/dna2oslab/tree/master...
  • prog_6103
  • prog_6103
  • 2015-11-09 21:35:09
  • 4631

(Not OK) 在CentOS7—编译nginx—for—Android

HOST: centos 7 NGINX VERSION: nginx-1.9.7 ZLIB VERSION: zlib-1.2.8 PCRE VERSION: pcre-8.37 ...
  • ztguang
  • ztguang
  • 2016-04-02 08:19:50
  • 1391

include/global.h

/* By Marcus Xing include/global.h 包含全局变量的声明*//* forward include: type.h const.h protect.h p...
  • damacheng
  • damacheng
  • 2010-03-22 16:29:00
  • 1622

glob函数的使用

glob库函数用于Linux文件系统中路径名称的模式匹配,即查找文件系统中指定模式的路径。注意,这不是正则表达式匹配,虽然有些相似,但还是有点差别。 glob函数原型        #include...
  • u010827484
  • u010827484
  • 2016-12-17 22:37:44
  • 1692

NDK(ngx_devel_kit)模块学习

NDK(nginx development kit)模块是一个拓展nginx服务器核心功能的模块,第三方模块开发可以基于它来快速实现。 NDK提供函数和宏处理一些基本任务,减轻第三方模块开发的代码量...
  • ciaos
  • ciaos
  • 2012-05-07 16:29:46
  • 7265

(Not OK) 在CentOS7—编译nginx—for—Android—Makefile

CC =    /opt/android-on-linux/android-ndk-r8e/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x8...
  • ztguang
  • ztguang
  • 2016-04-02 08:21:28
  • 477

Android-ndk-64位so文件问题(RSA加密采用cpp代码实现)

是这样的: rsa加密的一个方法:  BigInteger bigIntModulus = new BigInteger(modulus);           BigInteger bigIn...
  • zzq00000000
  • zzq00000000
  • 2016-04-09 15:53:54
  • 1210

Android NDK编译Openssl-1.1.0f静态库

0 前言 按照源代码C:\openssl-1.1.0f下的INSTALL文件中的编译指导,在Windows中用Cygwin模拟Linux环境顺利编译出libcrypt.a和libssl.a,然而在An...
  • ljttianqin
  • ljttianqin
  • 2017-06-10 16:35:53
  • 1233

Android编译系统详解(三)——编译流程详解

1.概述 编译Android的第三步是使用mka命令进行编译,当然我们也可以使用make –j4,但是推荐使用mka命令。因为mka将自动计算-j选项的数字,让我们不用纠结这个数字到底是多少(这个数字...
  • Yaphet_Chan
  • Yaphet_Chan
  • 2016-08-28 13:07:10
  • 419

安卓系统源码编译系列(七)——单独编译WebView兼容性问题解决

上一篇文章中,说明了单独编译WebView的流程,但是我们最后编译出来的版本只能在对应系统版本的模拟器或者真机才能运行,下面我们就需要解决各个版本的兼容问题。仔细分析不同版本运行时报的错误。...
  • zhaoxy2850
  • zhaoxy2850
  • 2014-02-08 20:39:56
  • 16984
收藏助手
不良信息举报
您举报文章:在64位Ubuntu下面使用android NDK编译nginx
举报原因:
原因补充:

(最多只允许输入30个字)