我从http://www.sqlite.org/sqlite-autoconf-3070701.tar.gz下载了sqlite
如何使用icu编译sqlite?
发布于 2011-07-05 14:26:33
1)可以引用http://www.sqlite.org/cvstrac/fileview?f=sqlite/ext/icu/README.txt将其编译为SQLite的动态扩展
编译和使用
扩展的最简单方法是构建并使用它作为一个可动态加载的SQLite扩展。要在*nix上使用gcc执行此操作:
gcc -shared icu.c icu-config --cppflags --ldflags
-o libSqliteIcu.so
您可能需要添加"-I“标志,以便gcc可以找到sqlite3ext.h和sqlite3.h。生成的共享库libSqliteIcu.so可以以与任何其他动态可加载扩展相同的方式加载到sqlite中。
(在SQLite提示符中加载是.load libSqliteIcu.so
)
2)您可以在启用ICU的情况下编译SQLite。根据http://www.sqlite.org/compile.html,您应该定义宏SQLITE_ENABLE_ICU
将-DSQLITE_ENABLE_ICU
添加到CFLAGS变量或在一些配置文件中添加#define SQLITE_ENABLE_ICU
。
好吧,这里有一些标准文档中没有描述的东西。以下是在启用ICU的情况下调用configure的示例:
CFLAGS='-O3 -DSQLITE_ENABLE_ICU' CPPFLAGS=`icu-config --cppflags` LDFLAGS=`icu-config --ldflags` ./configure
您还应该安装icu-config
程序(它来自libicu
或libicu-dev
软件包)
发布于 2018-10-18 22:40:44
您是在启用icu的情况下构建合并,还是仅构建icu扩展,这取决于您要对icu执行的操作。
如果你需要一个icu标记器(做fts),你需要构建合并,如果你只需要icu函数作为https://www.sqlite.org/cgi/src/dir?ci=6cb537bdce85e088&name=ext/icu列表,那么icu扩展就足够了。
当构建icu扩展时,我发现我不能将它命名为libSqliteIcu.so
,因为自述文件说b/c,当我加载它时,我得到了这个错误
sqlite> .load ./libSqliteIcu.so
Error: dlsym(0x7fa073e02c60, sqlite3_sqliteicu_init): symbol not found
在sqlit mail list问了这个问题后,我被告知,我已经证实了这一点。
符号名称为sqlite3_icu_init。加载模块lib<x>.so
时,将调用symbol sqlite3_<x>_init
。您需要(a)将共享库重命名为正确的名称(libicu.so
),或者在加载模块时将初始化函数的名称(sqlite3_icu_init)传递给加载程序,或者(b)更改icu.c
源代码中的sqlite3_icu_init
函数的名称,使其与模块加载程序正在查找的名称相匹配……
发布于 2021-05-19 14:46:21
要在启用ICU的情况下编译SQLite,您应该定义宏SQLITE_ENABLE_ICU
。
确保您已经安装了libicu-dev
(在Debian/Ubuntu上)。
正如@osgx所写的,标准文档缺少您也需要设置的特定于ICU的标志。从Ubuntu20.04开始,icu-config
已被弃用且缺失,因此您应该使用pkg-config
:
CFLAGS="-O2 -DSQLITE_ENABLE_ICU `pkg-config --libs --cflags icu-uc icu-io`" ./configure
make
请参见:
https://stackoverflow.com/questions/6578600
复制相似问题