编译sqlite3的spellfix

时间:2013-08-24 17:51:41

标签: c++ gcc sqlite

我需要建立“你是说这个吗?”功能到我的网站。我正在使用sqlite3并了解到我可以使用spellfix模块通过levenstein订购表。

我下载了source code of 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程序知之甚少。我是否在编译或其他事情上犯了一些错误?我该怎么办?

1 个答案:

答案 0 :(得分:2)

似乎缺少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))

然后它编译并且似乎正常运行。