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程序的编写遇到的问题的更多相关文章

  1. C++程序的编写和实现

    C++程序的编写和实现 一个程序从编写到最后得到运行结果要经历以下一些步骤. 1. 用C++语言编写程序 用高级语言编写的程序称为“源程序”(source program).C++的源程序是以.cpp ...

  2. 将Python代码嵌入C++程序进行编写

    将Python代码嵌入C++程序进行编写的实例,python嵌入 把python嵌入的C++里面需要做一些步骤 安装python程序,这样才能使用python的头文件和库 在我们写的源文件中增加“Py ...

  3. 初识Java程序,编写简单代码?

    Dear All: 初识Java程序,编写简单代码? 首先小编在这里说下我们今天编写Java程序使用的是 eclipse 开发工具! 1.下载eclipse 官网地址:http://www.eclip ...

  4. 第2章 PLC1200 与HMI (TP900) 组合仿真连接 编写1200程序,编写HMI 仿真过程拍摄视频

    博途V13 与 WINCC PROFESSIONAL V13 创建一个PLC工程 和屏幕的 练习. 在做S1200与 HMI的仿真之前 需要设置控制面板 设置PG/PC口 巡视窗口用于看设备的一些属性 ...

  5. Python的安装与小程序的编写

    Python的安装 在此之前,我完全不了解Python,为了完成任务,在慌忙之中了解了一下Python,通过百度,一步步安装好Python 过程 1.从官网中找到下载菜单并下载最新版本 2.双击pyt ...

  6. Python基础:五、Python程序的编写方式

    python程序有两种编写方式: 1. 进入cmd控制台(linux终端),输入python进入编辑模式,这时候我们可以直接编写python程序 2. 也可以在.py文件中编写python代码,通过p ...

  7. Python程序的编写方式

    直接在Python的交互式环境编写代码 现在,了解了如何启动和退出Python的交互式环境,我们就可以正式开始编写Python代码了. 在写代码之前,请千万不要用“复制”-“粘贴”把代码从页面粘贴到你 ...

  8. 单文件夹下的C程序如何编写Makefile文件

    通过学习已经学会了GCC的一些基础的命令,以及如何将C语言源代码编译成可执行文件. 我们已经知道在linux环境下编译源码时,常会有以下三个步骤: ./configure make make clea ...

  9. 基于Select模型通信程序的编写,编译和执行

    任务目标 编写Win32程序模拟实现基于Select模型的两台计算机之间的通信,要求编程实现服务器端与客户端之间双向数据传递.客户端向服务器端发送"计算从1到100的奇数和",服务 ...

随机推荐

  1. [PY3]——IO——pathlib

    pathlib.Path() from pathlib import Path p=Path("/test2") Path.cwd() print(p.cwd()) /py3 Pa ...

  2. H5微信自定义分享链接(设置标题+简介+图片)

    起源:最近公司在做招募广告的html5页面,然后做出来后,产品提出一个问题,需要分享出去的链接是卡片形式,内容也要自己定义,这下就难到我了,因为是第一次遇到这种需求,果断百度,然而,我就像大家一样,看 ...

  3. XMPP之openfire无法启动

    之前半个月自学ios的时候自己也配置过xmpp框架,也从github上下载了demo试了下,也是很完美运行的,最近想着再回头把XMPP框架系统的学习一下 ,毕竟当时学的时候还是在虚拟机中,卡死了.我这 ...

  4. C# XML创建解析、XML格式化

    导入命名空间: VS需要在项目中添加引用system.XML; 代码中添加 using System.XML和using System.IO; XML范例: <?xml version=&quo ...

  5. SQL空和NULL的区别

    1.NULL意思为缺失的值(missing value). 2.三值逻辑(three-valued-logic: TRUE,FALSE,UNKNOWN). 在SQL中有三个逻辑谓词:TURE,FALS ...

  6. Vue学习笔记:Ref的使用

    官网上的说明 1.了解Vue中的$refs在Vue中是怎么访问到DOM元素的 <div id="app"> <h1>{{ message }}</h1 ...

  7. SLF4+Logback 使用及配置

    在SpringBoot项目中使用slf4+logback ①在pom.xml中添加依赖 <dependency> <groupId>ch.qos.logback</gro ...

  8. HDU 2955(01背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=2955 这道题求不被抓时的最大金钱.金额是整数,概率是小数.因为数组小标不能是小数,所以我们可以以钱作为weigh ...

  9. Java 的 委托 是什么?

    前言:在学习设计模式时,发现书中有多次提到委托二字,所以经过网上搜索得到结果,并自己写了个小小的例子. 什么是委托? 委托模式是软件设计模式中的一项基本技巧.在委托模式中,有两个对象参与处理同一个请求 ...

  10. C#画个控件,指定字符特殊颜色显示

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...