我需要建立“你是说这个吗?”功能到我的网站。我正在使用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程序知之甚少。我是否在编译或其他事情上犯了一些错误?我该怎么办?
答案 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))
然后它编译并且似乎正常运行。