cgic程序的编写遇到的问题
cgic程序的编写
今天使用cgic库编写了一些cgi的代码,结果在编译的时候出了很多错误,在这里分享出来算是给自己做个笔记,虽然都是小问题但是急需解决的时候还是很麻烦的.
代码结构:
login_check.h文件声明
login_check.c定义
login.c使用login_check.h文件声明的函数
代码如下:简单描述一下,login.c中调用login_check.c实现的函数,其他就不要深究了.
/************************************************ * 文件名称: login_check.h * 文件描述: * 文件作者:by Wang.J,in 2013.11.14 * 文件版本: * 修改记录: *************************************************/ #include <sqlite3.h> #include <stdio.h> #include <stdlib.h> sqlite3 * open_db(const char *path); void close_db(sqlite3 *db); int login_check(const char *path, const char *usr, const char *pwd);
/************************************************
* 文件名称: login_check.c
* 文件描述:
* 文件作者:by Wang.J,in 2013.11.14
* 文件版本:
* 修改记录:
*************************************************/
#include “login_check.h”
/*==================================================
* 函数名称:
* 函数功能:
* 函数参数:
* 返 回 值:
* 创 建 人:
* 修改记录:
===================================================*/
sqlite3 * open_db(const char *path)
{
……………………
}
/*==================================================
* 函数名称:
* 函数功能:
* 函数参数:
* 返 回 值:
* 创 建 人:
* 修改记录:
===================================================*/
void close_db(sqlite3 *db)
{
……………………………..
}
/*==================================================
* 函数名称:
* 函数功能:
* 函数参数:
* 返 回 值:
* 创 建 人:
* 修改记录:
===================================================*/
int login_check(const char *path, const char *usr, const char *pwd)
{
………………………………..
}
/************************************************
* 文件名称: login.c
* 文件描述:
* 文件作者:by Wang.J,in 2013.11.14
* 文件版本:
* 修改记录:
*************************************************/
#include “login_check.h”
…………………………………………………….
/*==================================================
* 函数名称:
* 函数功能:
* 函数参数:
* 返 回 值:
* 创 建 人:
* 修改记录:
===================================================*/
int Search_DataBase(char *username, char *password)
{
return login_check(SQLITE_OPEN, username, password);
}
…………………………………………………………….
没什么问题,开始编译
第一个问题:找不到login_check中声明实现的login_check函数.
这个是由于编写的Makefile文件中login.c在login_check.c前面的原因,调整一下顺序可以解决.
第二个问题:缺少cgiMain:看过cgic库的各位明白cgic库在cgic文件中定义了main,然后分别调用各个文件中的cgiMain函数,所以问题也就简单了,加上一个空的cgiMain函数即可,
int cgiMain()
{
return 0;
}
第三个问题:login.c文件中Search_DataBase函数找不到login_check函数,太丧心病狂了,怎么可能?然后我又仔细看了一下cgic的实现,发现使用cgic库之后,每个文件变得相互独立没有联系了,所以找不到其他文件中定义的函数.所以我最后的解决办法是:将函数的定义与实现全部写入到.h文件,在其他需要使用的文件中直接include这个.h文件.修改后如下:
/************************************************
* 文件名称: login_check.h
* 文件描述:
* 文件作者:by Wang.J,in 2013.11.14
* 文件版本:
* 修改记录:
*************************************************/
#include <sqlite3.h>
#include <stdio.h>
#include <stdlib.h>
sqlite3 * open_db(const char *path)
{
……….实现………………………
}
void close_db(sqlite3 *db)
{
…………………实现…………………………
}
int login_check(const char *path, const char *usr, const char *pwd)
{
…………………….实现……………………………………
}
login.c文件内容不变.
这是我解决这个问题的方法,如果其他大侠有什么更好的解决办法,欢迎指点.谢谢!
cgic程序的编写遇到的问题的更多相关文章
- C++程序的编写和实现
C++程序的编写和实现 一个程序从编写到最后得到运行结果要经历以下一些步骤. 1. 用C++语言编写程序 用高级语言编写的程序称为“源程序”(source program).C++的源程序是以.cpp ...
- 将Python代码嵌入C++程序进行编写
将Python代码嵌入C++程序进行编写的实例,python嵌入 把python嵌入的C++里面需要做一些步骤 安装python程序,这样才能使用python的头文件和库 在我们写的源文件中增加“Py ...
- 初识Java程序,编写简单代码?
Dear All: 初识Java程序,编写简单代码? 首先小编在这里说下我们今天编写Java程序使用的是 eclipse 开发工具! 1.下载eclipse 官网地址:http://www.eclip ...
- 第2章 PLC1200 与HMI (TP900) 组合仿真连接 编写1200程序,编写HMI 仿真过程拍摄视频
博途V13 与 WINCC PROFESSIONAL V13 创建一个PLC工程 和屏幕的 练习. 在做S1200与 HMI的仿真之前 需要设置控制面板 设置PG/PC口 巡视窗口用于看设备的一些属性 ...
- Python的安装与小程序的编写
Python的安装 在此之前,我完全不了解Python,为了完成任务,在慌忙之中了解了一下Python,通过百度,一步步安装好Python 过程 1.从官网中找到下载菜单并下载最新版本 2.双击pyt ...
- Python基础:五、Python程序的编写方式
python程序有两种编写方式: 1. 进入cmd控制台(linux终端),输入python进入编辑模式,这时候我们可以直接编写python程序 2. 也可以在.py文件中编写python代码,通过p ...
- Python程序的编写方式
直接在Python的交互式环境编写代码 现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了. 在写代码之前,请千万不要用“复制”-“粘贴”把代码从页面粘贴到你 ...
- 单文件夹下的C程序如何编写Makefile文件
通过学习已经学会了GCC的一些基础的命令,以及如何将C语言源代码编译成可执行文件. 我们已经知道在linux环境下编译源码时,常会有以下三个步骤: ./configure make make clea ...
- 基于Select模型通信程序的编写,编译和执行
任务目标 编写Win32程序模拟实现基于Select模型的两台计算机之间的通信,要求编程实现服务器端与客户端之间双向数据传递.客户端向服务器端发送"计算从1到100的奇数和",服务 ...
随机推荐
- Django 中文文档地址
http://djangobook.py3k.cn/2.0/ MK一下
- android_serialport_api代码分析
1. 导入Android studio android_serialport_api是一个开源的串口测试工具,代码应该是用eclipse工程(不确定,没用过eclipse,反正不是Android st ...
- SQL Serever学习11——数据库的安全管理
公司管理软件设计完成,但是日常工作繁忙,向领导提出增加几个管理员,帮助管理和维护系统,领导同意了,但是要求一定要管理好这几个管理员用户,保证数据库的安全. 修改身份验证模式 数据库验证机制 sqlse ...
- Docker学习(二): 镜像的使用与构建
特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...
- JAVA注释方式
1.单行(single-line)注释 //…… 2.块(block)注释 /*……*/ 3.文档注释 /**……*/
- poj 2417 Discrete Logging ---高次同余第一种类型。babystep_gaint_step
Discrete Logging Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 2831 Accepted: 1391 ...
- eclipse中编写运行c/c++
注意:此过程有点复杂 准备:1.MinGW:c/c++运行环境: 2.CDT 1.MinGW:安装程序:http://sourceforge.net/projects/mingw/?source=ty ...
- 轻松学习java可重入锁(ReentrantLock)的实现原理(转 图解)
前言 相信学过java的人都知道 synchronized 这个关键词,也知道它用于控制多线程对并发资源的安全访问,兴许,你还用过Lock相关的功能,但你可能从来没有想过java中的锁底层的机制是怎么 ...
- MySQL Metadata
http://www.devart.com/dotconnect/mysql/docs/MetaData.html In this overload first parameter is name o ...
- CNN中卷积过程中padding的使用
1.podding='SAME'时,全0填充. 2.padding=“VALID”,不使用全0填充