我们搭建好了boa服务器后,为了方便使用Common Gateway interface (cgi),我们去网上下了一个简单的相关的c函数库,cgic205里面一共才9个文件
我们按照里面的例子
里面的Makefile文件
CFLAGS=-g -Wall
CC=gcc
AR=ar
RANLIB=ranlib
LIBS=-L./ -lcgic //动态链接 前面的-L./是什么意思?
all: libcgic.a cgictest.cgi capture //什么意思?
install: libcgic.a // 可以执行 make install 命令
cp libcgic.a /usr/local/lib //链接的库文件默认的路径名,以后用的时候只需 -lcgic 前面的lib不用写,libcgic.a这样写才符合命名规则
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
#mingw32 and cygwin users: replace .cgi with .exe // 这里我猜应该是qt中win32?的?看见了mingw32这玩意还有exe
cgictest.cgi: cgictest.o libcgic.a //为什么没有将.c 转换成.o 的过程呢?依赖文件.o不是不存在么?make 默认会做这部操作?
gcc cgictest.o -o cgictest.cgi ${LIBS} //动态链接 编译
capture: capture.o libcgic.a
gcc capture.o -o capture ${LIBS}
clean: //可以执行 make clean 命令
rm -f *.o *.a cgictest.cgi capture
或者也可以这样建一个Makefile
test.cgi:cgictest.c cgic.h cgic.c
gcc -wall cgictest.c cgic.c -o cgitest.cgi
我们打开这个压缩包还发现在cgic.c中有个main但是测试用例cgictest.c中却没有main只有个cgiMain()而在cgitest.c中头文件包含是这样的
#include <stdio.h>
#include "cgic.h"
#include <string.h>
我们要开发一个自己的cgi的话,
只需要实现一个cgiMain()即可,就像capture.c或者cgitest.c那样,cgic的函数库会自动把cgiMain连接到相应的main()上去,功能类似于回调函数哦,但用的是extern
。。。。。。。
。。。。。。。
赋予其执行CGI代码的权限.把刚才生成的cgitest.cgi放到cgi-bin目录中。此时我们可以在浏览器中输入以下地址进行访问:
http://127.0.0.1/cgi-bin/cgitest.cgi 如果正常的话,应该看到一个网页被展示出来。这样,第一个C语言的CGI程序就运行起来了。
如果浏览器报错,那么多半是配置服务器的时候有些操作没有正确完成。(我配置的是boa因为简单,小)