• (OK) port_php-5.6.14_to_Android—(和lighttpd集成成功)—没有基于android 4.4源码


    ++++++++++++++++++++++++编译 php-5.6.14,将用到的库静态链接进来
    [root@localhost php-5.6.14]# pwd
    /opt/cBPM-android/php-5.6.14
    [root@localhost php-5.6.14]#

    (android-ndk-r8e, androideabi-4.7, android-14)
    (android-ndk-r10d, androideabi-4.9, android-14)         //本次移植采用这套组合

    export NDK_ROOT="/opt/android-on-linux/android-ndk-r10d"
    export SYSROOT="$NDK_ROOT/platforms/android-14/arch-arm"
    export CFLAGS="-g --sysroot=$SYSROOT --pipe -I$NDK_ROOT/sources/cxx-stl/stlport/stlport -I$NDK_ROOT/platforms/android-14/arch-arm/usr/include -I$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/include -I$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.7/include-fixed -I$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.7/include -I/opt/cBPM-android/libiconv-1.14/include"
    export CPPFLAGS="$CFLAGS"
    export CXXFLAGS="$CFLAGS"
    export LDFLAGS="-L$NDK_ROOT/sources/cxx-stl/stlport/libs/armeabi-v7a -L/opt/cBPM-android/criteria-lin/lib -lstlport_static -liconv -lgcc -lc"
    export CPATH="$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin"
    export CPP="$CPATH/arm-linux-androideabi-cpp"
    export CXX="$CPATH/arm-linux-androideabi-g++"
    export CC="$CPATH/arm-linux-androideabi-gcc"
    export LD="$CPATH/arm-linux-androideabi-ld"
    export AR="$CPATH/arm-linux-androideabi-ar"

    ./configure --host=arm-linux-androideabi --disable-all --disable-cli --without-iconv --enable-mbstring --with-sqlite3 --enable-pdo=shared --with-pdo-sqlite=shared

    ln -s /opt/android-on-linux/android-ndk-r10d/platforms/android-14/arch-arm/usr/lib/crtbegin_so.o .
    ln -s /opt/android-on-linux/android-ndk-r10d/platforms/android-14/arch-arm/usr/lib/crtend_so.o .

    make -j4

    ----------------------------------
    至此,移植php成功,如果出现错误,参考本文最后面的问题解决方法
    ----------------------------------

    ----------------------------------下面将 php 复制到手机,和 lighttpd 集成

    第1步:将 php 复制到手机

    [root@localhost php-5.6.14]# ll sapi/cgi/php-cgi -h
    -rwxr-xr-x. 1 root root 14M 10月 22 21:21 sapi/cgi/php-cgi

    [root@localhost php-5.6.14]# adb push sapi/cgi/php-cgi /data/data/webserver/sbin

    第2步:配置lighttpd,支持php,修改lighttpd.conf

    [root@localhost lighttpd-1.4.37]# gedit ./doc/config/lighttpd.conf
    末尾添加:
    include "conf.d/fastcgi.conf"

    [root@localhost lighttpd-1.4.37]# adb push doc/config/lighttpd.conf /data/data/www/etc/lighttpd/


    第3步:配置lighttpd,支持php,修改fastcgi.conf

    [root@localhost lighttpd-1.4.37]# gedit ./doc/config/conf.d/fastcgi.conf
    末尾添加:
    ##----------------------------------------------------------------------------------
    fastcgi.server = ( ".php" =>
                       ( "php-local" =>
                         (
                           "socket" => socket_dir + "/php-fastcgi-1.socket",
                           "bin-path" => "/data/data/webserver/sbin/php-cgi",
                           "max-procs" => 1,
                           "broken-scriptfilename" => "enable",
                         )
                       ),
                       ( "php-tcp" =>
                         (
                           "host" => "127.0.0.1",
                           "port" => 9999,
                           "check-local" => "disable",
                           "broken-scriptfilename" => "enable",
                         )
                       ),

                       ( "php-num-procs" =>
                         (
                           "socket" => socket_dir + "/php-fastcgi-2.socket",
                           "bin-path" => "/data/data/webserver/sbin/php-cgi",
                           "bin-environment" => (
                             "PHP_FCGI_CHILDREN" => "16",
                             "PHP_FCGI_MAX_REQUESTS" => "10000",
                           ),
                           "max-procs" => 5,
                           "broken-scriptfilename" => "enable",
                         )
                       ),
                    )
    ##----------------------------------------------------------------------------------

    [root@localhost lighttpd-1.4.37]# adb push doc/config/conf.d/fastcgi.conf /data/data/www/etc/lighttpd/conf.d/


    第4步:

    [root@localhost lighttpd-1.4.37]# gedit test.php
    内容如下:
    <?php
        phpinfo();
    ?>

    [root@localhost lighttpd-1.4.37]# adb push test.php /data/data/www/htdocs


    第5步:启动lighttpd服务器

    /data/data/webserver/lighttpd -D -f /data/data/www/etc/lighttpd/lighttpd.conf -m /data/data/webserver/plugin

    第6步:宿主机,浏览器:
    http://192.168.0.101:8000/
    http://192.168.0.101:8000/test.php


    ----------------------------------
    至此,php 和 lighttpd 集成成功
    ----------------------------------



    ----------------------------------
    移植php,问题解决方法
    ----------------------------------

    ./configure --host=arm-linux-androideabi --disable-all --enable-pdo --with-sqlite3 --with-pdo-sqlite --with-zlib --without-iconv

    ./configure --host=arm-linux --enable-fastcgi --enable-force-cgi-redirect --enable-discard-path --disable-cli --without-iconv --enable-mbstring --enable-pdo=shared --with-sqlite=shared --with-pdo-sqlite=shared

    ./configure --host=arm-linux-androideabi --disable-all --enable-fastcgi --enable-force-cgi-redirect --enable-discard-path --disable-cli --without-iconv --enable-mbstring --enable-pdo --enable-pdo=shared --with-sqlite=shared --with-pdo-sqlite=shared
    ----------------------------------


    --------------------------------------
    ./configure --host="arm-linux-eabi" --enable-static --disable-shared --without-bzip2 --without-zlib
    --------------------------------------
    export LDFLAGS="-L$NDK_ROOT/sources/cxx-stl/stlport/libs/armeabi-v7a -L/opt/cBPM-android/criteria-lin/lib -static -lstlport_static -lgcc -lc"
    export CFLAGS="-DLIGHTTPD_STATIC -g --sysroot=$SYSROOT --pipe -I$NDK_ROOT/sources/cxx-stl/stlport/stlport -I$NDK_ROOT/platforms/android-14/arch-arm/usr/include -I$NDK_ROOT/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/include -I$NDK_ROOT/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.7/include-fixed -I$NDK_ROOT/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.7/include"
    --------------------------------------
    [root@localhost php-5.6.14]# gedit config.h
    添加:
    #define HAVE_SYS_UN_H 1
    [root@localhost php-5.6.14]# make -j5
    --------------------------------------

    [root@localhost php-5.6.14]# ll src/lighttpd
    -rwxr-xr-x. 1 root root 926240 10月 20 17:02 src/lighttpd
    [root@localhost php-5.6.14]#

    编译完后会产生lighttpd
    [root@localhost php-5.6.14]# adb push src/lighttpd /data/data/webserver

    把 plugins (mod_*.so)都放到/data/data/webserver/plugin
    [root@localhost php-5.6.14]# adb push src/.libs/somod /data/data/webserver/plugin
    [root@localhost php-5.6.14]# adb push src/.libs/mod /data/data/webserver/plugin

    [root@localhost php-5.6.14]# mv src/.libs/mod*.so src/.libs/somod
    [root@localhost php-5.6.14]# ls src/.libs/        库位置

    另外 libpcre.so 是需要的,请确定libpcre.so有存在。本文

    ------------------------------------------------
    [root@localhost php-5.6.14]# ls /opt/cBPM-android/criteria-lin/lib/
    Criteria.xml   helloworldcpp  libiconv.a         libLibraries.a   libsqlite.so    libWorkflowEngineD.so  
    libc.so        libiconv.so.2      libLibraries.so  libstdc++.so          libxerces-c-3.1.so
    executer       libdl.a        libiconv.so.2.5.1  libpcre.a        libstlport.so         libxerces-c.a
    helloworld     libdl.so       libiconv.so.bac    libsqlite.a      libWorkflowEngineD.a  temp2.txt
    [root@localhost php-5.6.14]#
    ------------------------------------------------

    ------------------------------------------------编译过程中出现的错误及其解决方法:

    错误:
    arm-linux-androideabi-g++: error: crtbegin_so.o: No such file or directory
    arm-linux-androideabi-g++: error: crtend_so.o: No such file or directory
    原因是ld找不到  crtbegin_so.o 和 crteng_so.o,
    解决方法,在项目源码下面建立软连接
    ln -s /opt/android-on-linux/android-ndk-r10d/platforms/android-14/arch-arm/usr/lib/crtbegin_so.o .
    ln -s /opt/android-on-linux/android-ndk-r10d/platforms/android-14/arch-arm/usr/lib/crtend_so.o .

    -----------------------
    checking for iconv... no
    checking for libiconv... no
    configure: error: Please reinstall the iconv library.
    解决方法:
    wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
    tar zxvf libiconv-1.14.tar.gz
    cd libiconv-1.14
    ./configure --prefix=/usr/local/libiconv
    make && make install
    cd ..
    -----------------------
    编译libiconv解决./stdio.h:1010:1: 错误: ‘gets’未声明(不在函数内)
    使用较高版本的LINUX系统编译libiconv时,执行make遇到了这个错误,解决方法如下:
        cd srclib/
        sed -i -e '/gets is a security/d' ./stdio.in.h
        cd ../
        make
    -----------------------
    /opt/cBPM-android/php-5.6.14/ext/standard/formatted_print.c:34:36: error: 'struct lconv' has no member named 'decimal_point'
     #define LCONV_DECIMAL_POINT (*lconv->decimal_point)

    解决方法:
    # gedit /opt/cBPM-android/php-5.6.14/ext/standard/formatted_print.c    line: 34
    # gedit /opt/cBPM-android/php-5.6.14/main/spprintf.c                line: 100
    # gedit /opt/cBPM-android/php-5.6.14/main/snprintf.c                line: 45


    #define LCONV_DECIMAL_POINT (*lconv->decimal_point)
    替换为:
    #define LCONV_DECIMAL_POINT '.'

    -----------------------
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:379:21: error: storage size of 'state' isn't known
      struct __res_state state;

    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:789:21: error: storage size of 'state' isn't known
      struct __res_state state;

    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:1023:21: error: storage size of 'state' isn't known
      struct __res_state state;
    解决方法:
    参考http://blog.csdn.net/dadoneo/article/details/8199113 和 /usr/include/resolv.h   line:71-150  添加到 下面文件  line: 43
    修改文件  /opt/android-on-linux/android-ndk-r10d/platforms/android-14/arch-arm/usr/include/resolv.h

    添加具体内容如下:
    //---------------------------------------------------------------------张 ztg add

    #include "netinet/in.h"
    #include "arpa/nameser.h"
    #include "resolv.h"

    /*
     * Inline versions of get/put short/long.  Pointer is advanced.
     */
    #define NS_INT32SZ    4    /*%< #/bytes of data in a u_int32_t */
    #define NS_INT16SZ    2    /*%< #/bytes of data in a u_int16_t */
    #define NS_GET16(s, cp) do {
        register const u_char *t_cp = (const u_char *)(cp);
        (s) = ((u_int16_t)t_cp[0] << 8)
            | ((u_int16_t)t_cp[1])
            ;
        (cp) += NS_INT16SZ;
    } while (0)
    #define NS_GET32(l, cp) do {
        register const u_char *t_cp = (const u_char *)(cp);
        (l) = ((u_int32_t)t_cp[0] << 24)
            | ((u_int32_t)t_cp[1] << 16)
            | ((u_int32_t)t_cp[2] << 8)
            | ((u_int32_t)t_cp[3])
            ;
        (cp) += NS_INT32SZ;
    } while (0)


    #define    GETSHORT        NS_GET16
    #define    GETLONG            NS_GET32

    #define ns_c_in    1    /*%< Internet. */
    #define ns_t_srv    33    /*%< Internet. */
    #define C_IN        ns_c_in
    #define T_SRV    ns_t_srv

    #define T_A DNS_T_A
    #define T_ANY DNS_T_ANY
    #define T_MX DNS_T_MX
    //#define C_IN 0

    typedef struct HEADER {
        int qdcount;
        int ancount;
        int nscount;
        int arcount;
    } HEADER;

    //---------------------------------------------------------------------
    上面解决了如下类似问题
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:466: error: undefined reference to 'GETSHORT'

    -----------------------
    /opt/cBPM-android/php-5.6.14/ext/standard/basic_functions.c:3623: error: undefined reference to 'zm_startup_password'
    ext/standard/.libs/basic_functions.o:basic_functions.c:basic_functions: error: undefined reference to 'zif_password_hash'
    ext/standard/.libs/basic_functions.o:basic_functions.c:basic_functions: error: undefined reference to 'zif_password_get_info'
    ext/standard/.libs/basic_functions.o:basic_functions.c:basic_functions: error: undefined reference to 'zif_password_needs_rehash'
    ext/standard/.libs/basic_functions.o:basic_functions.c:basic_functions: error: undefined reference to 'zif_password_verify'

    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:420: error: undefined reference to 'res_ninit'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:428: error: undefined reference to 'res_nsearch'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:434: error: undefined reference to 'res_nclose'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:466: error: undefined reference to 'GETSHORT'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:467: error: undefined reference to 'GETSHORT'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:468: error: undefined reference to 'GETLONG'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:469: error: undefined reference to 'GETSHORT'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:506: error: undefined reference to 'GETSHORT'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:592: error: undefined reference to 'GETLONG'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:594: error: undefined reference to 'GETLONG'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:596: error: undefined reference to 'GETLONG'

    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:913: error: undefined reference to 'res_ninit'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:921: error: undefined reference to 'res_nsearch'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:924: error: undefined reference to 'res_nclose'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:955: error: undefined reference to 'dn_skipname'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:959: error: undefined reference to 'res_nclose'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:1000: error: undefined reference to 'res_nclose'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:1048: error: undefined reference to 'res_ninit'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:1055: error: undefined reference to 'res_nsearch'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:1066: error: undefined reference to 'dn_skipname'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:1073: error: undefined reference to 'dn_skipname'
    /opt/cBPM-android/php-5.6.14/ext/standard/formatted_print.c:261: error: undefined reference to 'localeconv'
    /opt/cBPM-android/php-5.6.14/ext/standard/formatted_print.c:289: error: undefined reference to 'localeconv'
    /opt/cBPM-android/php-5.6.14/main/snprintf.c:1014: error: undefined reference to 'localeconv'
    /opt/cBPM-android/php-5.6.14/main/snprintf.c:1075: error: undefined reference to 'localeconv'
    collect2: error: ld returned 1 exit status
    make: *** [sapi/cgi/php-cgi] 错误 1
    [root@localhost php-5.6.14]#

    -----------------------
    error: undefined reference to 'localeconv'
    解决方法:
    # gedit /opt/cBPM-android/php-5.6.14/main/snprintf.c
    注释掉 line:1014、1075
    //                            lconv = localeconv();

    # gedit /opt/cBPM-android/php-5.6.14/ext/standard/formatted_print.c
    注释掉 line:261、289
    //            lconv = localeconv();

    # gedit /opt/cBPM-android/php-5.6.14/main/spprintf.c
    注释掉 line:624、684
    //                            lconv = localeconv();

    -----------------------
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:913: error: undefined reference to 'res_ninit'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:921: error: undefined reference to 'res_nsearch'
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:924: error: undefined reference to 'res_nclose'
    ...
    /opt/cBPM-android/php-5.6.14/ext/standard/dns.c:1073: error: undefined reference to 'dn_skipname'

    解决了如上类似问题:
    # gedit /opt/cBPM-android/php-5.6.14/ext/standard/dns.c
    res_ninit    替换为        __res_ninit
    dn_skipname    替换为        __dn_skipname
    # gedit ./ext/standard/php_dns.h
    res_nsearch    替换为        __res_nsearch
    res_nclose    替换为        __res_nclose
    res_search    替换为        __res_search
    -----------------------
    /opt/cBPM-android/php-5.6.14/ext/standard/basic_functions.c:3623: error: undefined reference to 'zm_startup_password'
    ext/standard/.libs/basic_functions.o:basic_functions.c:basic_functions: error: undefined reference to 'zif_password_hash'
    ext/standard/.libs/basic_functions.o:basic_functions.c:basic_functions: error: undefined reference to 'zif_password_get_info'
    ext/standard/.libs/basic_functions.o:basic_functions.c:basic_functions: error: undefined reference to 'zif_password_needs_rehash'
    ext/standard/.libs/basic_functions.o:basic_functions.c:basic_functions: error: undefined reference to 'zif_password_verify'

    解决方法参考:
    https://github.com/thekid/php-src/commit/4c2b86ef006c71523ca2a8a613cc779773a2bcc6
    http://blog.chinaunix.net/uid-14735472-id-5230146.html


    -----------------------
  • 相关阅读:
    词汇表处理脚本
    jLowNote又,我为什么要说又,有bug
    于是按照贴吧某同学的指教,把imageViewer里那个愚蠢的语句改了
    捉到Bug一只,jLowNote里的
    高产赛母猪
    我超喜欢Nimbus风格的!
    专注写记事本三十年
    秒秒钟食言
    别再打了,Java和Python,你们其实都是C
    电话本写完了,发个1.0吧
  • 原文地址:https://www.cnblogs.com/ztguang/p/12647065.html
Copyright © 2020-2023  润新知