Сборка Sqlite ICU с помощью xcode
Как мне скомпилировать sqlite с ICU (International Components for Unicode) как проект в рабочей области моего приложения для iPhone?
Я скомпилировал объединение sqlite раньше, однако я не уверен, какие файлы мне следует загружать, и какие сценарии нужно добавить в xcode - конечно, я не первый, кому это нужно.
В идеале я ищу пошаговые инструкции.
2 ответа
Это довольно старый вопрос, но, т.к. я потратил довольно много времени на создание версии ICU, я бы хотел поделиться своим опытом. В основном я поднял вопрос и получил помощь из списка рассылки sqlite здесь https://www.mail-archive.com/sqlite-users@mailinglists.sqlite.org/msg112029.html
Поэтому сначала используйте brew для установки icu4c, но с защелкой b / c brew отказывается связывать 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
tar из https://www.sqlite.org/download.html Затем просто запустите configure следующим образом (если первая строка вашего файла конфигурации 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"
Я сделал это с 5.2.1 в Linux (компилятор GCC), используя исходный код ICU здесь: 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, но это может немного помочь.