本帖最后由 nameofhsw 于 2012-08-21 15:07:44 编辑 web server使用的是boa。
目前,单独编译cgi程序没有错误。
但是如果在main函数中调用cgilib提供的函数,譬如init_cgi()等(实际上,就算是新写一个空函数调用也会出现这种情况,所以排除函数错误的原因),那么页面访问该cgi时,boa则提示cgi_header: unable to find LFLF。
打开boa的FASCIST_LOGGING调试信息,利用boa的调试信息:
fprintf(stderr, "\"%s\"\n", buf); //其中buf = req->header_line
得到的结果是语句仅仅显示一对“”,而没有任何内容。
正常应该显示cgi的main中所有printf的HTML报文,即“Content-type: text/html\n\n”等。
这个是cgilib库的原因吗?还是因为makefile没写好导致没有调用到cgilib??
或者是另外的原因?求高手指点
附上cgi的makefile文件内容:(其中libcgi-1.0为cgilib库)
CC=gcc
ifeq ($(SAMBA),1)
CFLAGS += -DLARGE_UPGRADE_BUF=1
endif
CFLAGS += -DPRODUCT_$(PRODUCT)
CFLAGS += -Wall -Ilibcgi-1.0/src/
LDFLAGS += -Llibcgi-1.0/src/ -lcgi
all: libcgi xml_action.o login.o protected.o
$(CC) xml_action.o -o xml_action.cgi $(LDFLAGS)
$(CC) login.o -o login.cgi $(LDFLAGS)
$(CC) protected.o -o protected.cgi $(LDFLAGS)
libcgi:
cd libcgi-1.0; ./configure
make -C libcgi-1.0 CC="$(CC) -fPIC"
clean:
rm -f *.cgi *.o
make -C libcgi-1.0/ clean
------解决方案--------------------------------------------------------
另外给login.c的main函数:
可以正常在boa的调试信息中看到语句:“Content-type: text/html”,即上面所说req->header_line的内容。
int main(void)
{
printf("Content-type: text/html\n\n");
return -1;
}
boa调试信息显示“cgi_header: unable to find LFLF”,以及一个空的“”,即上面所说req->header_line的内容。
int main(void)
{
printf("Content-type: text/html\n\n");
cgi_init();
return -1;
}
------解决方案--------------------------------------------------------
搞定,关掉。
因为把libcgi.so文件添加到/usr/lib就好了