(OK) port_lighttpd_to_Android——没有基于android 4.4源码

[root@localhost lighttpd-1.4.37]# pwd
/opt/cBPM-android/lighttpd-1.4.37

[root@localhost lighttpd-1.4.37]# ls /opt/cBPM-android/criteria-lin/lib/libpcre.a
/opt/cBPM-android/criteria-lin/lib/libpcre.a            //下面有libpcre.a的编译过程

[root@localhost pcre-8.37]# pwd
/opt/cBPM-android/pcre-8.37
[root@localhost pcre-8.37]# cp pcre.h /opt/cBPM-android/lighttpd-1.4.37/src/

[root@localhost lighttpd-1.4.37]# gedit src/network.c
添加:
#include "sys/un.h>

--------------------------------------问题: sock_addr has no member named un ,解决方法如下:
[root@localhost lighttpd-1.4.37]# gedit config.h
添加:
#define HAVE_SYS_UN_H 1
[root@localhost lighttpd-1.4.37]# make -j5
--------------------------------------
[root@localhost lighttpd-1.4.37]# gedit src/plugin.c
注释掉:
//#include "plugin-static.h"
--------------------------------------

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

export NDK_ROOT="/opt/android-on-linux/android-ndk-r8e"
export SYSROOT="NDKROOT/platforms/android14/archarm"exportCFLAGS="gsysroot=SYSROOT --pipe -INDKROOT/sources/cxxstl/stlport/stlportINDK_ROOT/platforms/android-14/arch-arm/usr/include -INDKROOT/toolchains/armlinuxandroideabi4.7/prebuilt/linuxx8664/includeINDK_ROOT/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.7/include-fixed -INDKROOT/toolchains/armlinuxandroideabi4.7/prebuilt/linuxx8664/lib/gcc/armlinuxandroideabi/4.7/include"exportCPPFLAGS="CFLAGS"
export CXXFLAGS="CFLAGS"exportLDFLAGS="LNDK_ROOT/sources/cxx-stl/stlport/libs/armeabi-v7a -L/opt/cBPM-android/criteria-lin/lib -L/opt/cBPM-android/lighttpd-1.4.37/src/.libs -lstlport_static -lgcc -lc"
export CPATH="NDKROOT/toolchains/armlinuxandroideabi4.7/prebuilt/linuxx8664/bin"exportCPP="CPATH/arm-linux-androideabi-cpp"
export CXX="CPATH/armlinuxandroideabig++"exportCC="CPATH/arm-linux-androideabi-gcc"
export LD="CPATH/armlinuxandroideabild"exportAR="CPATH/arm-linux-androideabi-ar"

./configure --host="arm-linux-androideabi" --without-bzip2 --without-zlib

--------------------------------------
./configure --host="arm-linux-eabi" --enable-static --disable-shared --without-bzip2 --without-zlib
--------------------------------------
export LDFLAGS="-LNDKROOT/sources/cxxstl/stlport/libs/armeabiv7aL/opt/cBPMandroid/criterialin/libstaticlstlportstaticlgcclc"exportCFLAGS="DLIGHTTPDSTATICgsysroot=SYSROOT --pipe -INDKROOT/sources/cxxstl/stlport/stlportINDK_ROOT/platforms/android-14/arch-arm/usr/include -INDKROOT/toolchains/armlinuxandroideabi4.7/prebuilt/linuxx8664/includeINDK_ROOT/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.7/include-fixed -INDK_ROOT/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.7/include" -------------------------------------- [root@localhost lighttpd-1.4.37]# gedit config.h 添加: #define HAVE_SYS_UN_H 1 [root@localhost lighttpd-1.4.37]# make -j5 --------------------------------------  [root@localhost lighttpd-1.4.37]# ll src/lighttpd -rwxr-xr-x. 1 root root 926240 10月 20 17:02 src/lighttpd [root@localhost lighttpd-1.4.37]#   编译完后会产生lighttpd [root@localhost lighttpd-1.4.37]# adb push src/lighttpd /data/data/webserver  把 plugins (mod_*.so)都放到/data/data/webserver/plugin [root@localhost lighttpd-1.4.37]# adb push src/.libs/somod /data/data/webserver/plugin [root@localhost lighttpd-1.4.37]# adb push src/.libs/mod /data/data/webserver/plugin  [root@localhost lighttpd-1.4.37]# mv src/.libs/mod*.so src/.libs/somod [root@localhost lighttpd-1.4.37]# ls src/.libs/        库位置  另外 libpcre.so 是需要的,请确定libpcre.so有存在。本文  ------------------------------------------------ [root@localhost lighttpd-1.4.37]# 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 lighttpd-1.4.37]#  ------------------------------------------------  +++++++++++++++++++++++++++++++++++++++ [root@localhost ~]# adb root [root@localhost ~]# adb shell root@mb526:/ # mkdir /data/data/webserver root@mb526:/ # mkdir /data/data/webserver/plugin root@mb526:/ # mkdir /data/data/www root@mb526:/ # mkdir /data/data/www/log root@mb526:/ # mkdir /data/data/www/run root@mb526:/ # mkdir /data/data/www/etc root@mb526:/ # mkdir /data/data/www/etc/lighttpd root@mb526:/ # mkdir /data/data/www/etc/lighttpd/conf.d root@mb526:/ # mkdir /data/data/www/tmp root@mb526:/ # mkdir /data/data/www/htdocs root@mb526:/ # mkdir /data/data/www/cgi-bin root@mb526:/ # chmod 755 /data/data/www/cgi-bin  root@mb526:/ #   [root@localhost lighttpd-1.4.37]# pwd /opt/cBPM-android/lighttpd-1.4.37 [root@localhost lighttpd-1.4.37]# adb push src/lighttpd /data/data/webserver [root@localhost lighttpd-1.4.37]# adb push doc/config/conf.d/ /data/data/www/etc/lighttpd/conf.d/  [root@localhost lighttpd-1.4.37]# mkdir src/.libs/mod [root@localhost lighttpd-1.4.37]# mv src/.libs/lib*.a src/.libs/mod/ [root@localhost lighttpd-1.4.37]# adb push src/.libs/mod/ /data/data/webserver/plugin/  接下来把 lighttpd soruce 内的 doc/config/conf.d 内的所有档案通通放到 /data/data/www/etc/lighttpd/conf.d/ 然后在/data/data/www/etc/lighttpd/ 放上 lighttpd.conf, 内容如下:  [root@localhost lighttpd-1.4.37]# gedit doc/config/lighttpd.conf   ####################################################################### ## /etc/lighttpd/lighttpd.conf ## ## check /etc/lighttpd/conf.d/*.conf for the configuration of modules. #######################################################################  ####################################################################### ## Some Variable definition which will make chrooting easier. ## ## if you add a variable here. Add the corresponding variable in the ## chroot example aswell. ## var.log_root    = "/data/data/www/log" var.server_root = "/data/data/www" var.state_dir   = "/data/data/www/run" var.home_dir    = "/data/data/www" var.conf_dir    = "/data/data/www/etc/lighttpd"  var.cache_dir   = home_dir + "/tmp" var.socket_dir  = home_dir + "/tmp"  server.modules = (   "mod_access", )  server.port = 8000 server.use-ipv6 = "disable"  #server.username  = "lighttpd" #server.groupname = "lighttpd"  server.core-files = "enable"  server.document-root = server_root + "/htdocs" #server.pid-file = state_dir + "/lighttpd.pid"  server.errorlog             = log_root + "/error.log"  server.event-handler = "linux-sysepoll"  # not supported? # I got an error "server.network-backend has a unknown value: linux-sendfile" #server.network-backend = "linux-sendfile"  server.max-fds = 512  server.stat-cache-engine = "simple" server.max-connections = 170  index-file.names += (   "index.xhtml", "index.html", "index.htm", "default.htm", "index.php" )  url.access-deny = ( "~", ".inc" )HTTP["url"] =~ "\.pdf" {   server.range-requests = "disable" }  ## ## mimetype mapping ## include "conf.d/mime.conf"  server.follow-symlink = "enable"  server.upload-dirs = ( "/data/data/www/tmp" )  #include "conf.d/webdav.conf"  #--------------------------------------------  [root@localhost lighttpd-1.4.37]# adb push doc/config/lighttpd.conf /data/data/www/etc/lighttpd/  上述动作都准备完毕后, 就可以用下述的指令来测试看看整个环境设定是否ok了 ### ./lighttpd -t -f /data/data/www/etc/lighttpd/lighttpd.conf -m /system/lib/web-plugin        //这行不用

root@mb526:/data/data/webserver # ./lighttpd -t -f /data/data/www/etc/lighttpd/lighttpd.conf
Syntax OK
root@mb526:/data/data/webserver #

如果没问题的话会, 执行结果会显示
Syntax OK

再来就是验证是否web server可以运行了, 用以下指令来启动lighttpd,    -m 指明lib的位置
root@mb526:/data/data/webserver # ./lighttpd -D -f /data/data/www/etc/lighttpd/lighttpd.conf -m /data/data/webserver/plugin

在/data/data/www/htdocs 内放一个index.html来测试
-------------------

   
       

Hello, lighthttpd on Android!!


   

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

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

在 宿主机(笔记本)的浏览器访问: http://192.168.0.101:8000/
输出结果:
------------------------
Hello, lighthttpd on Android!!
------------------------

至此,移植成功。

++++++++++++++++++++++++++++++++++++++++++++++++++


以下是要说明怎么启动cgi (也许google可以找到很多答案, 但是这边是我动手try过后确定可行的方法)

[root@localhost lighttpd-1.4.37]# gedit doc/config/lighttpd.conf

edit lighttpd.conf to add mod_alias plugin. 这个动作是一定要作的, 不然会发现就算之后已经有load mod_cgi, 且对应的conf 都设定了, 但却还是不 work.
-------------------
server.modules = (
"mod_access",
"mod_alias"
)
.....
.....
include "conf.d/cgi.conf"
-------------------

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

[root@localhost lighttpd-1.4.37]# gedit doc/config/conf.d/cgi.conf

再来就是去编辑 cgi.conf, 取消注释
-------------------
alias.url += ( "/cgi-bin" => server_root + "/cgi-bin" )
HTTP["url"] =~ "^/cgi-bin" {    cgi.assign = ( "" => "" ) } -------------------  [root@localhost lighttpd-1.4.37]# adb push doc/config/conf.d/cgi.conf /data/data/www/etc/lighttpd/conf.d/  [root@localhost lighttpd-1.4.37]# gedit hello.c  示范用C 写一个简单的cgi 程序来测试, 很简单, 试试以下内容: ------------------- #include  int main(void) {     printf("Content-Type: text/html\n\n");     printf("Hello world\n\n");     return 0; } ------------------- 》》》》》》》》》》》(OK) 宿主机交叉编译hello.c  for  android (--sysroot),不使用Android.mk和ndk-build  export PATH=PATH:/opt/android-on-linux/android-ndk-r8e/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/bin/

[root@localhost lighttpd-1.4.37]# arm-linux-androideabi-gcc --sysroot=/opt/android-on-linux/android-ndk-r8e/platforms/android-14/arch-arm/ hello.c -o hello

[root@localhost lighttpd-1.4.37]# adb push hello /data/data/www/cgi-bin

将其编译好后放到/data/data/www/cgi-bin , 比如说 first, 之后就透过browser来测试看看
http://localhost:4080/cgi-bin/hello

如果成功的话, 可以看到browser上 Hello world!

------------------------至此,CGI成功

root@mb526:/data/data/webserver # ./lighttpd -D -f /data/data/www/etc/lighttpd/lighttpd.conf -m /data/data/webserver/plugin
------------------------




+++++++++++++++++++++++++++++++ 编译 pcre-8.37 静态库
[root@localhost pcre-8.37]#
/opt/cBPM-android/pcre-8.37
[root@localhost pcre-8.37]#

export NDK_ROOT="/opt/android-on-linux/android-ndk-r8e"
export SYSROOT="NDKROOT/platforms/android14/archarm"exportCFLAGS="gsysroot=SYSROOT --pipe -INDKROOT/sources/cxxstl/stlport/stlportINDK_ROOT/platforms/android-14/arch-arm/usr/include -INDKROOT/toolchains/armlinuxandroideabi4.7/prebuilt/linuxx8664/includeINDK_ROOT/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.7/include-fixed -INDKROOT/toolchains/armlinuxandroideabi4.7/prebuilt/linuxx8664/lib/gcc/armlinuxandroideabi/4.7/include"exportCPPFLAGS="CFLAGS"
export CXXFLAGS="CFLAGS"exportLDFLAGS="LNDK_ROOT/sources/cxx-stl/stlport/libs/armeabi-v7a -L/opt/cBPM-android/criteria-lin/lib -static -lstlport_static -lgcc -lc"
export CPATH="NDKROOT/toolchains/armlinuxandroideabi4.7/prebuilt/linuxx8664/bin"exportCPP="CPATH/arm-linux-androideabi-cpp"
export CXX="CPATH/armlinuxandroideabig++"exportCC="CPATH/arm-linux-androideabi-gcc"
export LD="CPATH/armlinuxandroideabild"exportAR="CPATH/arm-linux-androideabi-ar"

./configure --host="arm-linux-eabi"  --enable-static --disable-shared

make -j5

[root@localhost pcre-8.37]# ls .libs/libpcre.a
[root@localhost pcre-8.37]# cp .libs/libpcre.a /opt/cBPM-android/criteria-lin/lib

++++++++++++++杂项
$ ldd ./libtest.so

posted @   张同光  阅读(166)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示