当前位置: 首页 > 工具软件 > lighttpd-cpp > 使用案例 >

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

邵耀
2023-12-01

+++++++++++++++++++++++++++++++++++++++++编译 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 和 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

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'

解决方法参考:

http://blog.chinaunix.net/uid-14735472-id-5230146.html

-----------------------

阅读(1961) | 评论(0) | 转发(0) |

 类似资料: