cgic程序的編寫 sql
今天使用cgic庫編寫了一些cgi的代碼,結果在編譯的時候出了不少錯誤,在這裏分享出來算是給本身作個筆記,雖然都是小問題可是急需解決的時候仍是很麻煩的. 函數
代碼結構: spa
login_check.h文件聲明 code
login_check.c定義 sqlite
login.c使用login_check.h文件聲明的函數 blog
代碼以下:簡單描述一下,login.c中調用login_check.c實現的函數,其餘就不要深究了. it
/************************************************ * 文件名稱: 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); } …………………………………………………………….
沒什麼問題,開始編譯 io
第一個問題:找不到login_check中聲明實現的login_check函數. 編譯
這個是因爲編寫的Makefile文件中login.c在login_check.c前面的緣由,調整一下順序能夠解決. class
第二個問題:缺乏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文件內容不變.
這是我解決這個問題的方法,若是其餘大俠有什麼更好的解決辦法,歡迎指點.謝謝!