文章目录
- 前言
- 一、CGI
- 二、CGI的具体移植步骤
- 2.1 cgi源码下载
- 2.2 搭建交叉编译环境
- 2.3 注意事项
- 三、测试结果
- 总结
前言
书接上期,上期与大家分享的是boa服务器的移植,那么几天要和大家介绍的呢是一款接口,哈哈哈,用起来也是有点难度的,但是,大家要知道,有些东西虽然很高深,但是只要我们会使用能够使用最基本的就可以;这也间接证明了我们嵌入式设计的一个特点,那就是够用就行,但对于学习者来说,肯定是懂得越多越好,那我认为呢,在设计时,当黔驴技穷时,做到够用就行是OK的,但是如果说作为学习者而言,肯定是不够滴!所以学无止境呀,哈哈哈哈~,下面看下CGI!
一、CGI
首先呢CGIC是一个库,也可以称之为一个interface,这里列举一些CGI的基本功能:
1 分析数据,并自动校正一些有缺陷的浏览器发来的数据;
2 透明接收用GET或 POST方法发来的Form数据;
3 能接受上传文件;
4 能够设置和接收cookies;
5 用一致的方式处理From元素里的回车;
6 提供字符串,整数,浮点数,单选或多选功能来接收数据;
7 提供数字字段的边界检查;
8 能够将CGI环境变量转化成C中的非空字符串;
9 提供CGI程序的调试手段,能够回放CGI程序执行时的CGI状态;
总之,CGIC是一个功能比较强大的支持CGI开发的标准C库,并支持Linux, Unix 和Windows等多操作系统。
二、CGI的具体移植步骤
需要强调的是在上期分享中boa服务器是现在Ubuntu环境下进行安装测试(boa的格式为X86格式),那么我们这次移植cgi到A9平台上;
2.1 cgi源码下载
从CGIC的主站点http://www.boutell.com/cgic/下载源码,将其解压并进入源码目录;
本项目使用的是cgi的2.05版本;
下载后拷贝到Ubuntu环境下直接进行解压即可;
解压后如下:
2.2 搭建交叉编译环境
这里需要注意的是CC=arm-linux-gcc,生成的文件就是可以在ARM平台上运行的文件;
修改Makefile文件,找到CC=gcc,将其改成CC=arm-linux-gcc,
找到AR=ar,将其改成AR=arm-linux-ar,
找到RANLIB=ranlib,将其改成RANLIB=arm-linux-ranlib。
找到gcc cgictest.o -o cgictest.cgi ${LIBS},将其改成$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS},
找到gcc capture.o -o capture ${LIBS},将其改成$(CC) $(CFLAGS) capture.o -o capture ${LIBS},
保存退出。
修改后的Makefile
CFLAGS=-g -Wall
#CROSS_COMPILE=
CROSS_COMPILE=arm-linux-
CC=$(CROSS_COMPILE)gcc
AR=$(CROSS_COMPILE)ar
RANLIB=$(CROSS_COMPILE)ranlib
LIBS=-L./ -lcgic
all: libcgic.a cgictest.cgi capture
install: libcgic.a //可以执行 make install 命令 目标
cp libcgic.a /usr/local/lib
cp cgic.h /usr/local/include
@echo libcgic.a is in /usr/local/lib. cgic.h is in /usr/local/include.
libcgic.a: cgic.o cgic.h //libcgic.a 依赖于 cgic.c 和 cgic.h
rm -f libcgic.a
$(AR) rc libcgic.a cgic.o //一个归档命令 ar rc libcgic.a
$(RANLIB) libcgic.a //“ranlib”来对静态库的符号索引表进行更新。
#mingw32 and cygwin users: replace .cgi with .exe
cgictest.cgi: cgictest.o libcgic.a
$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS}
#gcc cgictest.o -o cgictest.cgi ${LIBS}
capture: capture.o libcgic.a
$(CC) $(CFLAGS) capture.o -o capture ${LIBS}
#gcc capture.o -o capture ${LIBS}
clean:
rm -f *.o *.a cgictest.cgi capture
根据Makefile编译可以看出,有两个拷贝的过程:
cp libcgic.a /usr/local/lib
cp cgic.h /usr/local/include
两个命令的学习:
ar命令可以用来创建、修改库,也可以从库中提出单个模块。库是一单独的文件,
里面包含了按照特定的结构组织起来的其它的一些文件(称做此库文件的member)。
原始文件的内容、模式、时间戳、属主、组等属性都保留在库文件中。
2.3 注意事项
修改完成Makefile后进行make,生成ARM版本的测试用例;
将capture文件拷贝到A9平台的BAO服务器下,放在cgi-bin文件夹下;
三、测试结果
总结
本期和大家分享的是CGI的移植,其实也是比较简单的,但是真的想要编写CGI程序,大家还是需要花费一定的心思的。虽然目前移植CGI的工作已经完成了,但是还是需要后期花费一定的精力去学习这部分的知识,因为CGI是运行在BOA服务器之上的真正的沟通html和A9主进线程通信的一个桥梁;如果大家的项目小组里有这样的人才,那么大家可以先致力于别的重点模块的理解和开发,最后再来了解这一部分,先用起来,慢慢学习理解!!!
最后,各位小伙伴们如果有收获,可以点赞收藏哦,你们的认可是我创作的动力,一起加油!