Appweb-7.2.3交叉编译支持html
Appweb-7.2.3交叉编译支持html
环境:Ubuntu1604
编译链:4.8的Android编译链
Appweb源码:appweb-src.tgz
Android模块:RK3288
一、官网下载源码并解压源码(注意官网下载的是社区版,功能有阉割,像Building with FastCGI, Building with Proxy,Building with PHP,都没有,但跑个html还是没有问题的)
tar -xjvf appweb-src.tgz
cd appweb-7.2.3
二、修改文件,一共需要修改3个文件(appweb-linux-default.mk,appweb-linux-default-me.h,mprLib.c)
1.修改appweb-7.2.3\projects\appweb-linux-default.mk文件
……
NAME := appweb
VERSION := 7.2.3
PROFILE ?= default
ARCH ?= arm
CC_ARCH ?= arm
OS ?= linux
CC := arm-linux-androideabi-gcc
AR := arm-linux-androideabi-ar
CONFIG ?=
(
O
S
)
−
(OS)-
(OS)−(ARCH)-
(
P
R
O
F
I
L
E
)
B
U
I
L
D
?
=
b
u
i
l
d
/
(PROFILE) BUILD ?= build/
(PROFILE)BUILD?=build/(CONFIG)
……
ME_COM_MDB := 1
endif
#android 4.4 之后需要支持PIE -pie -fPIE
CFLAGS += -pie -fPIE
CFLAGS += -fPIC -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Wl,-z,relro,-z,now -Wl,–as-needed -Wl,–no-copy-dt-needed-entries -Wl,-z,noexecstatck -Wl,-z,noexecheap -w
DFLAGS += -D_REENTRANT -DPIC
(
p
a
t
s
u
b
s
t
(patsubst %,-D%,
(patsubst(filter ME_%,
(
M
A
K
E
F
L
A
G
S
)
)
)
−
D
M
E
C
O
M
C
G
I
=
(MAKEFLAGS))) -DME_COM_CGI=
(MAKEFLAGS)))−DMECOMCGI=(ME_COM_CGI) -DME_COM_COMPILER=
(
M
E
C
O
M
C
O
M
P
I
L
E
R
)
−
D
M
E
C
O
M
D
I
R
=
(ME_COM_COMPILER) -DME_COM_DIR=
(MECOMCOMPILER)−DMECOMDIR=(ME_COM_DIR) -DME_COM_EJS=
(
M
E
C
O
M
E
J
S
)
−
D
M
E
C
O
M
E
S
P
=
(ME_COM_EJS) -DME_COM_ESP=
(MECOMEJS)−DMECOMESP=(ME_COM_ESP) -DME_COM_HTTP=
(
M
E
C
O
M
H
T
T
P
)
−
D
M
E
C
O
M
L
I
B
=
(ME_COM_HTTP) -DME_COM_LIB=
(MECOMHTTP)−DMECOMLIB=(ME_COM_LIB) -DME_COM_MATRIXSSL=
(
M
E
C
O
M
M
A
T
R
I
X
S
S
L
)
−
D
M
E
C
O
M
M
B
E
D
T
L
S
=
(ME_COM_MATRIXSSL) -DME_COM_MBEDTLS=
(MECOMMATRIXSSL)−DMECOMMBEDTLS=(ME_COM_MBEDTLS) -DME_COM_MDB=
(
M
E
C
O
M
M
D
B
)
−
D
M
E
C
O
M
M
P
R
=
(ME_COM_MDB) -DME_COM_MPR=
(MECOMMDB)−DMECOMMPR=(ME_COM_MPR) -DME_COM_NANOSSL=
(
M
E
C
O
M
N
A
N
O
S
S
L
)
−
D
M
E
C
O
M
O
P
E
N
S
S
L
=
(ME_COM_NANOSSL) -DME_COM_OPENSSL=
(MECOMNANOSSL)−DMECOMOPENSSL=(ME_COM_OPENSSL) -DME_COM_OSDEP=
(
M
E
C
O
M
O
S
D
E
P
)
−
D
M
E
C
O
M
P
C
R
E
=
(ME_COM_OSDEP) -DME_COM_PCRE=
(MECOMOSDEP)−DMECOMPCRE=(ME_COM_PCRE) -DME_COM_PHP=
(
M
E
C
O
M
P
H
P
)
−
D
M
E
C
O
M
S
S
L
=
(ME_COM_PHP) -DME_COM_SSL=
(MECOMPHP)−DMECOMSSL=(ME_COM_SSL) -DME_COM_VXWORKS=
(
M
E
C
O
M
V
X
W
O
R
K
S
)
−
D
M
E
C
O
M
W
A
T
C
H
D
O
G
=
(ME_COM_VXWORKS) -DME_COM_WATCHDOG=
(MECOMVXWORKS)−DMECOMWATCHDOG=(ME_COM_WATCHDOG)
PIEFLAGS = -pie -fPIE
IFLAGS += "-IKaTeX parse error: Double superscript at position 51: …+= '-rdynamic' '̲-Wl,--enable-ne…
O
R
I
G
I
N
/
′
库
直
接
拷
贝
到
/
s
y
s
t
e
m
/
l
i
b
/
里
面
使
用
的
,
如
果
带
了
这
个
参
数
会
导
致
D
T
错
误
。
L
I
B
P
A
T
H
S
+
=
−
L
ORIGIN/' 库直接拷贝到/system/lib/里面使用的,如果带了这个参数会导致DT 错误。 LIBPATHS += -L
ORIGIN/′库直接拷贝到/system/lib/里面使用的,如果带了这个参数会导致DT错误。LIBPATHS+=−L(BUILD)/bin
LIBS += -ldl -lm 删除-lpthread -lrt arm不需要这个库
DEBUG ?= debug
CFLAGS-debug ?= -g
……
$(BUILD)/bin/appweb: $(DEPS_47)
@echo ’ [Link] $(BUILD)/bin/appweb’
$(CC) -o $(BUILD)/bin/appweb $(PIEFLAGS) $(LDFLAGS)
(
L
I
B
P
A
T
H
S
)
"
(LIBPATHS) "
(LIBPATHS)"(BUILD)/obj/appweb.o" $(LIBPATHS_47) $(LIBS_47) $(LIBS_47) $(LIBS) $(LIBS)
……
$(BUILD)/bin/authpass: $(DEPS_48)
@echo ’ [Link] $(BUILD)/bin/authpass’
$(CC) -o $(BUILD)/bin/authpass $(PIEFLAGS) $(LDFLAGS)
(
L
I
B
P
A
T
H
S
)
"
(LIBPATHS) "
(LIBPATHS)"(BUILD)/obj/authpass.o" $(LIBPATHS_48) $(LIBS_48) $(LIBS_48) $(LIBS) $(LIBS)
……
$(BUILD)/bin/appweb-esp: $(DEPS_49)
@echo ’ [Link] $(BUILD)/bin/appweb-esp’
$(CC) -o $(BUILD)/bin/appweb-esp $(PIEFLAGS) $(LDFLAGS)
(
L
I
B
P
A
T
H
S
)
"
(LIBPATHS) "
(LIBPATHS)"(BUILD)/obj/esp.o" $(LIBPATHS_49) $(LIBS_49) $(LIBS_49) $(LIBS) $(LIBS)
endif
……
$(BUILD)/bin/http: $(DEPS_51)
@echo ’ [Link] $(BUILD)/bin/http’
$(CC) -o $(BUILD)/bin/http $(PIEFLAGS) $(LDFLAGS)
(
L
I
B
P
A
T
H
S
)
"
(LIBPATHS) "
(LIBPATHS)"(BUILD)/obj/http.o" $(LIBPATHS_51) $(LIBS_51) $(LIBS_51) $(LIBS) $(LIBS)
Endif
……
$(BUILD)/bin/makerom: $(DEPS_54)
@echo ’ [Link] $(BUILD)/bin/makerom’
$(CC) -o $(BUILD)/bin/makerom $(PIEFLAGS) $(LDFLAGS)
(
L
I
B
P
A
T
H
S
)
"
(LIBPATHS) "
(LIBPATHS)"(BUILD)/obj/makerom.o" $(LIBPATHS_54) $(LIBS_54) $(LIBS_54) $(LIBS) $(LIBS)
……
$(BUILD)/bin/appman: $(DEPS_56)
@echo ’ [Link] $(BUILD)/bin/appman’
$(CC) -o $(BUILD)/bin/appman $(PIEFLAGS) $(LDFLAGS)
(
L
I
B
P
A
T
H
S
)
"
(LIBPATHS) "
(LIBPATHS)"(BUILD)/obj/watchdog.o" $(LIBPATHS_56) $(LIBS_56) $(LIBS_56) $(LIBS) $(LIBS)
Endif
……
2.修改:appweb-linux-default-me.h
#ifndef ME_COMPILER_HAS_SYNC64
//#define ME_COMPILER_HAS_SYNC64 1 注释掉这个
#endif
3.\appweb-7.2.3\src\mpr\mprLib.c 增加代码在8765行后面
char *getpass(char *prompt)
{
return “NOT-SUPPORTED”;
}
三、编译
make -f projects/appweb-linux-default.mk
编译无错误会在build目录下生成linux-arm-default目录
可以通过arm-linux-androideabi-strip工具把库和执行文件瘦身
四、拷贝执行
借助adb工具,把编译好的linux-arm-default目录整个拷贝到/data/local/
adb push e:\linux-arm-default /data/local/
把linux-arm-default/bin/ 里面appweb用到的lib文件拷贝到/system/lib/
增加权限:
cp libappweb.so /system/lib/
cp libesp.so /system/lib/
cp libhttp.so /system/lib/
cp libmpr.so /system/lib/
chmod 777 ./appweb
cp libpcre.so /system/lib/ 不能拷贝这个库,这个库有问题的,会引起系统崩溃的。Appweb也不需要拷贝这个动态库。
./appweb --version
可以打印版本就成功了。
五、配置
修改max-server目录下面appweb.conf文件。
……
Server home directory for Appweb to find configuration files.
Appweb will change directory to this location when it runs.
Home “/vendor/opt/webbox”
Define the logging co
……
WARNING: this may disclose unwanted information. Do not enable in production releases.
ShowErrors on
……
GroupAccount root
UserAccount root
……
Listen 80
SSL/TLS configuration
ListenSecure 4443 # # SECURITY NOTE: you must generate the certificate and key. # Use a decrypted key here so it won't prompt for the password when # the server is restarted. # SSLCertificateFile "/vendor/opt/webbox/bin/self.crt" SSLCertificateKeyFile "/vendor/opt/webbox/bin/self.key" …… # Documents webs
借助adb工具,把拷贝整个max-server 目录整个拷贝到/vendor/opt/webbox/
adb push e:\max-server /vendor/opt/webbox/
adb shell
cd /vendor/opt/webbox/
mv web webs
执行
/vendor/opt/webbox/bin/appweb --config /vendor/opt/webbox/appweb.conf &
访问访问IP就可以跳转到hello Home page