goahead(嵌入式Web服务器)之交叉编译、移植篇

GoAhead简介:
GoAhead是一个开源(商业许可)、简单、轻巧、功能强大、可以在多个平台运行的嵌入式Web Server。

GoAhead主要特性:
1 很小的内存消耗
2 支持认证功能Digest Access Authentication (DAA)
3 支持安全的通信,例如SSL(安全的套接字层)
4 支持动态Web页面,如ASP页面
5 可以使用传统的C语言编程定制Web页面里的HTML标签
6 支持CGI(公共网关编程接口)
7 嵌入式的Javascript脚本翻译器
8 独特的URL分析器
9 它基本上属于一个HTTP1.0标准的WEB服务器,对一些HTTP1.1的特性如(持久连接)也提供了支持。每秒65次connections
10 可执行文件大小、内存使用情况:内存需求60K,它的WIN CE版本编译后的大小还不到60k。

goahead源码(百度云盘)
链接:https://pan.baidu.com/s/1ux_9k3ixycMFjLsmHRirBQ
提取码:0gmd
goahead版本:5.1.1

交叉编译:
进入goahead-5.1.1目录,进行编译
make CC=工具链(如arm-himix200-linux-gcc) ARCH=arm //编译
make CC=工具链(如arm-himix200-linux-gcc) ARCH=arm clean //清除
编译后,会在build目录里生成linux-arm-default文件,里面有目标文件以及对于的依赖文件。
注:实际是在编译projects目录下的Makefile文件:goahead-linux-default.mk,编译可以不用传参的形式,直接在goahead-linux-default.mk里修改CC工具链等参数。

移植:
1、将build的linux-arm-default文件的bin目录里的目标文件goahead,依赖的动态库libgo,安全证书self.crt、self.key、auth.txt、route.txt拷贝到开发部的同一个目录下
2、运行goahead 如./goahead

移植可能遇到的问题以及解决方法:
问题1:
goahead: 0: Cannot get host address for host (none): errno 2
goahead: 0: Cannot initialize server. Exiting.

原因分析:
没有设置好IP,需要goahead设置IP

解决措施:
在http.c的setLocalHost函数里,将这块代码

struct hostent  *hp;
    if ((hp = gethostbyname(host)) == NULL) {
        error("Cannot get host address for host %s: errno %d", host, errno);
        return -1;
    }
    memcpy((char*) &intaddr, (char *) hp->h_addr_list[0], (size_t) hp->h_length);
    ipaddr = inet_ntoa(intaddr);

屏蔽掉,并添加 ipaddr=“0.0.0.0”;
即如:

/*struct hostent  *hp;
    if ((hp = gethostbyname(host)) == NULL) {
        error("Cannot get host address for host %s: errno %d", host, errno);
        return -1;
    }
    memcpy((char*) &intaddr, (char *) hp->h_addr_list[0], (size_t) hp->h_length);
    ipaddr = inet_ntoa(intaddr);*/
    ipaddr="0.0.0.0";

**注:**0.0.0.0 代表本机的所有ip地址

问题二:
goahead: 0: Cannot bind to address *:80, errno 98
goahead: 0: Unable to open socket on port 80.

原因分析:
其他的应用程序在占用80端口,例如web程序等

解决措施:
kill占用80端口的进程即可

测试例子:
在浏览器上输入设备ip即可显示首页网站

(1)建立网页文件
网页文件index.html,其内容:

<html><head><title>index.html</title></head>
<body>Hello /index.html</body>
<p>Link to reload <a href="index.html">this page</a></p>
<p>Link to <a href="/action/logout">log out</a></p>
<p>Link to <a href="test.html">test.html</a></p>
</html>

(2)设置goaeah网页html文件的查找路径
在projects目录的goahead-linux-default-me.h文件里修改ME_GOAHEAD_DOCUMENTS为

#define ME_GOAHEAD_DOCUMENTS "./"

改为当前路径。
(3)将index.html文件放在与目标文件goahead相同的目录即可

(4)在网页上输入IP运行即可先index.html内容

总结:每次修改源码内容时,都需要把libgo.so库更新才有效,因为goahead把其他依赖的文件做成了动态库。

下一章节会讲asp与goform、文件下载、cgi的应用

猜你喜欢

转载自blog.csdn.net/weixin_40732273/article/details/107814320