【问题标题】:Compiling spellfix for sqlite3为 sqlite3 编译 spellfix
【发布时间】:2014-01-21 22:37:42
【问题描述】:

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

【问题讨论】:

    标签: c++ gcc sqlite


    【解决方案1】:

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

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

    【讨论】:

    • 您在哪个代码中添加了这些扩展?是拼写吗?
    猜你喜欢
    • 2012-05-21
    • 2010-12-22
    • 2014-05-23
    • 1970-01-01
    • 2011-07-13
    • 2013-09-16
    • 1970-01-01
    • 2016-11-17
    • 2013-12-12
    相关资源
    最近更新 更多