建立和Xcode sqlite的ICU(Building Sqlite ICU with xcode

2019-10-21 07:38发布

如何编译ICU(Unicode的国际组件)SQLite作为我的iPhone应用程序的工作区的一个项目?

我之前已经编译sqlite的融合,但我不知道哪些文件,我应该下载,并且需要被添加到Xcode的脚本是什么 - 当然我不是第一个需要这个。

理想的情况是我在寻找一步一步的指示。

Answer 1:

这是一个相当古老的问题,但B / C我在建立一个ICU版本,自己花了相当长的一段时间,我想分享我的经验。 基本上,我提出的问题,并从这里SQLite的邮件列表的帮助https://www.mail-archive.com/sqlite-users@mailinglists.sqlite.org/msg112029.html

所以首先使用BREW安装ICU4C,不过有个问题,B / C冲泡拒绝链接ICU4C。 所以,我需要在我的路径添加ICU4C

qiulangs-MacBook-Pro:fts qiulang$ brew info icu4c
icu4c: stable 62.1 (bottled) [keg-only]
C/C++ and Java libraries for Unicode and globalization
http://site.icu-project.org/
/usr/local/Cellar/icu4c/62.1 (250 files, 67.3MB)
  Poured from bottle on 2018-07-05 at 15:12:09
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/icu4c.rb
==> Caveats
icu4c is keg-only, which means it was not symlinked into /usr/local,
because macOS provides libicucore.dylib (but nothing else).

If you need to have icu4c first in your PATH run:
  echo 'export PATH="/usr/local/opt/icu4c/bin:$PATH"' >> ~/.bash_profile
  echo 'export PATH="/usr/local/opt/icu4c/sbin:$PATH"' >> ~/.bash_profile

For compilers to find icu4c you may need to set:
  export LDFLAGS="-L/usr/local/opt/icu4c/lib"
  export CPPFLAGS="-I/usr/local/opt/icu4c/include"

其次,下载sqlite-autoconf焦油https://www.sqlite.org/download.html然后只需运行配置这样的,(如果你的配置输出的第一行是bash: icu-config: command not found然后检查为什么ICU4C是不是在你的路径。)

./configure CFLAGS="-DSQLITE_ENABLE_ICU `icu-config --cppflags`" LDFLAGS="`icu-config --ldflags`"

我没有设置LDFLAGS & CPPFLAGS为BREW建议,我仍然与输出运行配置成功creating Makefile ,然后运行make建立一个ICU版本。 我相信以后你要仔细检查它的工作原理。 这是我使用的样本代码:

sqlite> CREATE VIRTUAL TABLE zh_text USING fts4(text, tokenize=icu zh_CN);
sqlite> INSERT INTO zh_text values('为什么不支持中文 Can icu support Chinese');
sqlite> CREATE VIRTUAL TABLE zh_terms USING fts4aux(zh_text);
sqlite> SELECT term, col, documents FROM zh_terms;
can|*|1
can|0|1
chinese|*|1
chinese|0|1
icu|*|1
icu|0|1
support|*|1
support|0|1
不|*|1
不|0|1
中文|*|1
中文|0|1
为什么|*|1
为什么|0|1
支持|*|1
支持|0|1
sqlite> CREATE VIRTUAL TABLE icu_zh_cn USING fts3tokenize(icu, zh_CN);
sqlite> SELECT token, start, end, position FROM icu_zh_cn WHERE INPUT='为什么不支持中文 fts5 does not seem to work for chinese';
为什么|0|9|0
不|9|12|1
支持|12|18|2
中文|18|24|3
fts5|25|29|4
does|30|34|5
not|35|38|6
seem|39|43|7
to|44|46|8
work|47|51|9
for|52|55|10
chinese|56|63|11

fts5似乎不支持ICU分词又那么我只能FTS3或FTS4。

sqlite> CREATE VIRTUAL TABLE zh_text5 USING fts5(text, tokenize=icu zh_CN);
Error: parse error in "tokenize=icu zh_CN"


Answer 2:

:我已经使用从这里的ICU源代码5.2.1 Linux上(GCC编译器)这样做http://site.icu-project.org/download/52 。 所有的CPP和c文件添加到项目中。 合并的SQLite 3.8.4.1也是该项目。 诀窍是定义:

ICU需要:U_COMMON_IMPLEMENTATION U_STATIC_IMPLEMENTATION U_I18N_IMPLEMENTATION HAVE_CONFIG_H HAVE_INTTYPES_H

SQLite的需求:SQLITE_OMIT_LOAD_EXTENSION

这不是最容易的事情,但比老版本的ICU的容易得多。

当然,Linux是不是iPhone,但是这可能会有点帮助。



文章来源: Building Sqlite ICU with xcode