2

我需要构建“你的意思是这个吗?” 功能到我的网站。我正在使用 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程序知之甚少。我是否在编译时犯了一些错误或发生了其他事情?我应该怎么办?

4

1 回答 1

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))

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

于 2014-01-21T14:37:42.567 回答