goahead移植到Android
来源:互联网 发布:软件开发企业资质证书 编辑:程序博客网 时间:2024/06/07 05:19
转载请标明出处:http://blog.csdn.net/u013752202/article/details/78569470
goahead简介:
goahead是嵌入式开发常用的开源的http服务器(Web Server),作为针对嵌入式设计的服务程序,goahead体积小巧、内存消耗低、CPU占用少,支持跨平台。作为开源的http服务器,goahead功能强大,版本更新速度快,兼容最新的Web技术。(个人测试觉得比boa好用,在嵌入式资源跑Apache吃力的时候goahead绝对是很好的选择)
移植到Android系统:
这里的说的Android开发,是指嵌入式Android系统开发,跟Android app开发不同的是,嵌入式Android开发需要自己对Android源代码进行裁剪定制。
1.libgo.so编译
(1)保持原来的Makefile中的变量等不变,找到libgo.so的所有依赖文件,和编译FLAG(包括CFLAGS/DFLAGS/LDFLAGS等),然后依赖文件赋值给LOCAL_SRC_FILES,所有的FLAG赋值给LOCAL_CFLAGS,再指定LOCAL_C_INCLUDES的目录,其他的按照Android.mk的规则就行。其中-lrt,-lpthread,-ldl,-lm等Android会自动链接,无需显示的指定。
(2)编译过程中可能会遇到一些问题:
a. error: storage class specified for parameter "..."
error: expected declaration specifiers before "..."
源文件中有无法识别的符号导致,很有可能linux系统下的宏被Android裁剪掉了。找到这个宏,要么重新定义,要么删除。
比如: extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind) __THROW;
__THROW这个宏在Android里面被裁剪掉了,所以直接去掉即可。
b. static char *getpass(char *prompt)这个函数本来是linux下unistd.h里面声明的函数,在Android中的unistd.h中也被裁剪掉了,这个函数不能直接删除,那么就必须重新实现。
在Android.mk中的LOCAL_CFLAG里面加上-DANDROID,然后在代码中实现static char *getpass(char *prompt)。
#ifdef ANDROID#define MAX_PASS 64static char *getpass(char *prompt){ static char password[MAX_PASS]; int c, i; fputs(prompt, stdout); for (i = 0; i < (int) sizeof(password) - 1; i++) { c = getchar(); if (c == '\r' || c == EOF) { break; } if ((c == '\b' || c == 127) && i > 0) { password[--i] = '\0'; fputs("\b \b", stdout); i--; } else if (c == 26) { /* Control Z */ c = EOF; break; } else if (c == 3) { /* Control C */ fputs("^C\n", stdout); exit(255); } else if (!iscntrl((uchar) c) && (i < (int) sizeof(password) - 1)) { password[i] = c; fputc('*', stdout); } else { fputc('', stdout); i--; } } if (c == EOF) { return ""; } fputc('\n', stdout); password[i] = '\0'; return sclone(password);}#endif
下面是Android.mk的libgo.so部分
## goahead-linux-default.mk -- Makefile to build Embedthis GoAhead for linux#LOCAL_PATH:= $(call my-dir)###########################################libgo.go############################################include $(CLEAR_VARS)NAME := goaheadVERSION := 3.6.3PROFILE ?= defaultARCH ?= $(shell uname -m | sed 's/i.86/x86/;s/x86_64/x64/;s/arm.*/arm/;s/mips.*/mips/')CC_ARCH ?= $(shell echo $(ARCH) | sed 's/x86/i686/;s/x64/x86_64/')OS ?= linuxCC ?= gccCONFIG ?= $(OS)-$(ARCH)-$(PROFILE)BUILD ?= build/$(CONFIG)LBIN ?= $(BUILD)/binPATH := $(LBIN):$(PATH)ME_COM_COMPILER ?= 1ME_COM_LIB ?= 1ME_COM_MATRIXSSL ?= 0ME_COM_MBEDTLS ?= 1ME_COM_NANOSSL ?= 0ME_COM_OPENSSL ?= 0ME_COM_OSDEP ?= 1ME_COM_SSL ?= 1ME_COM_VXWORKS ?= 0ME_COM_OPENSSL_PATH ?= "/usr/lib"ifeq ($(ME_COM_LIB),1) ME_COM_COMPILER := 1endififeq ($(ME_COM_MBEDTLS),1) ME_COM_SSL := 1endififeq ($(ME_COM_OPENSSL),1) ME_COM_SSL := 1endifCFLAGS += -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 -wDFLAGS += -DME_DEBUG=1 -D_REENTRANT -DPIC -D_FORTIFY_SOURCE=2 $(patsubst %,-D%,$(filter ME_%,$(MAKEFLAGS))) -DME_COM_COMPILER=$(ME_COM_COMPILER) -DME_COM_LIB=$(ME_COM_LIB) -DME_COM_MATRIXSSL=$(ME_COM_MATRIXSSL) -DME_COM_MBEDTLS=$(ME_COM_MBEDTLS) -DME_COM_NANOSSL=$(ME_COM_NANOSSL) -DME_COM_OPENSSL=$(ME_COM_OPENSSL) -DME_COM_OSDEP=$(ME_COM_OSDEP) -DME_COM_SSL=$(ME_COM_SSL) -DME_COM_VXWORKS=$(ME_COM_VXWORKS)IFLAGS += "-I$(BUILD)/inc"LDFLAGS += '-rdynamic' '-Wl,--enable-new-dtags' '-Wl,-rpath,$$ORIGIN/'LIBPATHS += -L$(BUILD)/binLIBS += -lrt -ldl -lpthread -lmDEBUG ?= debugCFLAGS-debug ?= -gDFLAGS-debug ?= -DME_DEBUGLDFLAGS-debug ?= -gDFLAGS-release ?=CFLAGS-release ?= -O2LDFLAGS-release ?=CFLAGS += $(CFLAGS-$(DEBUG))DFLAGS += $(DFLAGS-$(DEBUG))LDFLAGS += $(LDFLAGS-$(DEBUG))LDFLAGS+=-D_FILE_OFFSET_BITS=64 -D_FILE_OFFSET_BITS=64 -DMBEDTLS_USER_CONFIG_FILE=\"embedtls.h\"#defined by myselfLDFLAGS+=-DANDROIDLOCAL_SRC_FILES:= src/action.c \ src/alloc.c \ src/auth.c \ src/cgi.c \ src/crypt.c \ src/file.c \ src/fs.c \ src/http.c \ src/js.c \ src/jst.c \ src/options.c \ src/osdep.c \ src/rom.c \ src/route.c \ src/runtime.c \ src/socket.c \ src/time.c \ src/upload.c \ src/mbedtls/mbedtls.c \ src/goahead-mbedtls/goahead-mbedtls.c \ src/goahead-openssl/goahead-openssl.cLOCAL_C_INCLUDES:=$(LOCAL_PATH)/src/ \ $(LOCAL_PATH)/build/linux-x64-default/inc/LOCAL_CFLAGS:=$(CFLAGS)LOCAL_CFLAGS+=$(DFLAGS)LOCAL_CFLAGS+=$(LDFLAGS)LOCAL_MODULE_TAGS := optionalLOCAL_MODULE_OWNER := zhanghwLOCAL_MODULE := libgoinclude $(BUILD_SHARED_LIBRARY)
2.goahead编译
紧接上面的写,这里需要依赖上面生成的libgo.so,
LOCAL_SHARED_LIBRARIES:=libgo
下面是goahead部分:
################################goahead####################################include $(CLEAR_VARS)LOCAL_SRC_FILES=src/goahead.c \ src/mbedtls/mbedtls.c \ src/goahead-mbedtls/goahead-mbedtls.c \ src/goahead-openssl/goahead-openssl.cLOCAL_C_INCLUDES:=$(LOCAL_PATH)/src/ \ $(LOCAL_PATH)/build/linux-x64-default/inc/LOCAL_SHARED_LIBRARIES:=libgoLOCAL_CFLAGS:=$(CFLAGS)LOCAL_CFLAGS+=$(DFLAGS)LOCAL_CFLAGS+=$(LDFLAGS)LOCAL_MODULE_TAGS := optionalLOCAL_MODULE_OWNER := zhanghwLOCAL_MODULE := goaheadinclude $(BUILD_EXECUTABLE)
3.goahead-test和gopass的编译也是一样,这里用不到,所以不编译进去。
4.配置文件拷贝和相关目录建立
紧接上面的Android.mk:
##################################copy config files###########################include $(CLEAR_VARS)$(shell mkdir -p $(TARGET_OUT_DATA))$(shell cp -rf $(LOCAL_PATH)/goaheadconf/goahead/ $(TARGET_OUT_DATA))
阅读全文
0 0
- goahead移植到Android
- goahead移植到uclinux
- 移植goahead 到开发板笔记
- goahead-3.6.2移植到linux
- goahead 移植
- goahead移植
- goAhead 2.5 嵌入式web服务器 移植到 ARM 板上
- goahead-3.3.6版本源码方式移植到wince
- goahead 2.1.8 移植
- Goahead移植教程
- goahead win 移植
- stm32移植ecos系列:goAhead移植到eCos,基于LWIP协议栈
- web服务器goahead的移植
- goAhead 2.5嵌入式web服务器移植到arm9 2440 + linux中
- goAhead 2.5嵌入式web服务器移植到arm9 2440 + linux中
- [转]goAhead 2.5嵌入式web服务器移植到arm9 2440 + linux中
- goAhead 2.5嵌入式web服务器移植到arm9 2440 + linux中
- goAhead 2.5嵌入式web服务器移植到arm9 2440 + linux中
- 并查集(最小生成树)
- Android 初始篇四 Android 四大组件之BroadcastReceiver
- 字符编码乱码问题string转utf-8
- RecycleView列表中下拉刷新图片错乱的问题
- 用java的swing组件写的记事本
- goahead移植到Android
- YTU OJ 3141: 动态规划进阶题目之神奇的口袋(Java解题)
- WIN10 下 VS CODE 更新后拓展宿主意外终止 问题解决方法(终极解决办法)
- request、response 中文乱码问题与解决方式
- 搜寻文件下包含某个字符串的文件
- PAT
- Linux 下各个目录的作用及内容
- exercise. 写出下面各表达式的值
- 关于CNN的卷积理解