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的奇数和",服务 ...
随机推荐
- JVM内存模型和垃圾回收
Java开发有个很基础的问题,虽然我们平时接触的不多,但是了解它却成为Java开发的必备基础——这就是JVM.在C++中我们需要手动申请内存然后释放内存,否则就会出现对象已经不再使用内存却仍被占用的情 ...
- [译]用R语言做挖掘数据《二》
数据探索 一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou,密码shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到程序: ...
- 非常不错的js 屏蔽类加验证类
1 >屏蔽功能类 1.1 屏蔽键盘所有键 <script language="javascript"><!--function document.onkey ...
- Form身份验证
Forms身份验证Web.config<system.web><authentication mode="Forms"> <fo ...
- MUI框架 picker日期选择器实例
MUI官方文档点我 (一)准备工作,下载相关的js.cs文件,地址 (二)新建普通html页面 1)引入相关js.cs文件 2) 一个input,记录下id: <form> <lab ...
- fieldset、legend、display html元素
fieldset 定义和用法 fieldset 元素可将表单内的相关元素分组. <fieldset> 标签将表单内容的一部分打包,生成一组相关表单的字段. 当一组表单元素放到 <fi ...
- java自学-编程入门
java语言写的代码需要先编译为可执行文件,才能被jvm执行.在下载的jdk安装目录下的bin目录,有两个可执行程序java.exe和javac.exe,javac就是用来编译的,java是执行编译后 ...
- UML 简介笔记
1. UML 是什么? UML 统一建模语言是一组图形表示法,可以帮助描述和设计软件系统,特别是使用面向对象 OO 风格建造的软件系统. 2. 使用 UML 的方式 UML 有 3 种使用模式:草稿, ...
- 中南月赛 1313: ZZY的宠物
1313: ZZY的宠物 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 114 Solved: 59[Submit][Status][Web Boar ...
- Oracle数据库RowId
RowId是什么? RowId是根据每一行数据的物理信息地址编码而成的一个位列,利用RowId可以快速定位到某一行. Oracle数据库编辑数据必须查出RowId,可以根据如下语句查询: select ...