正在编译sqlite3的拼写修复程序

Compiling spellfix for sqlite3

本文关键字:程序 编译 sqlite3      更新时间:2023-10-16

我需要为我的网站构建"你是故意的吗?"功能。我正在使用sqlite3,并了解到我可以使用spellfix模块通过levenstein对表进行排序。

我下载了sqlite3的源代码,并编译了spellfix.c(位于/ext/misc/内部),如下所示:

gcc -shared -fPIC -Wall -I/tmp/sqlite-src-3071700/ spellfix.c -o spellfix

它编译成功,但当我将它加载到sqlite:中时

sqlite> .load ./spellfix

我得到这个错误:

Error: ./spellfix: undefined symbol: sqlite3_extension_init

我对编译c程序的知识真的很少。是我在编译时犯了什么错误,还是发生了其他事情?我该怎么办?

似乎缺少sqlite init函数。这里有一个讨论http://sqlite.1065341.n5.nabble.com/SQLite-version-3-7-16-td67776.html

我在顶部添加了以下代码。

static int spellfix1Register(sqlite3 *db); 
int sqlite3_extension_init(sqlite3 *db, char ** pxErrMsg, const sqlite3_api_routines *pApi){
    SQLITE_EXTENSION_INIT2(pApi);
    return spellfix1Register(db);
}

还需要以下内容,因为我无法在不产生额外问题的情况下提取sqlite3_stricmp函数的标头:

int sqlite3_stricmp(const char *zLeft, const char *zRight){
    return strcasecmp(zLeft, zRight);
}

也需要这个:

#define SQLITE_CONSTRAINT_NOTNULL      (SQLITE_CONSTRAINT | (5<<8))

然后它进行了编译,似乎运行正常。