Как скомпилировать sqlite с ICU? - PullRequest
5 голосов
/ 05 июля 2011

Я скачал sqlite с http://www.sqlite.org/sqlite-autoconf-3070701.tar.gz

Как мне скомпилировать sqlite с помощью icu?

Ответы [ 2 ]

9 голосов
/ 05 июля 2011

1) Вы можете скомпилировать его как динамическое расширение SQLite. Ссылаясь http://www.sqlite.org/cvstrac/fileview?f=sqlite/ext/icu/README.txt

Самый простой способ скомпилировать и использовать расширение ICU - это собрать и использовать его как динамически загружаемое расширение SQLite. Сделать это используя gcc на * nix:

gcc -shared icu.c `icu-config  --cppflags --ldflags` -o libSqliteIcu.so

Вам может понадобиться добавить флаги "-I", чтобы gcc мог найти sqlite3ext.h и sqlite3.h. Результирующая общая библиотека libSqliteIcu.so может быть загружается в sqlite так же, как любой другой динамически загружаемый расширение.

(загрузка .load libSqliteIcu.so в приглашении SQLite)

2) Вы можете скомпилировать SQLite с включенным ICU. Согласно http://www.sqlite.org/compile.html Вы должны определить макрос SQLITE_ENABLE_ICU:

Добавьте -DSQLITE_ENABLE_ICU в переменную CFLAGS или добавьте #define SQLITE_ENABLE_ICU в некоторый файл конфигурации.

Хорошо, здесь есть что-то, что не описано в стандартной документации. Вот пример вызова конфигурации с включенным ICU:

 CFLAGS='-O3 -DSQLITE_ENABLE_ICU' CPPFLAGS=`icu-config --cppflags` LDFLAGS=`icu-config --ldflags` ./configure

У вас также должна быть установлена ​​программа icu-config (из пакета libicu или libicu-dev)

0 голосов
/ 18 октября 2018

Если вы создаете объединение с включенным icu или просто с расширением icu, зависит от того, что вы хотите сделать с icu.

Если вам нужен токенайзер icu (для выполнения fts), вам нужно создать объединение, если вам просто нужны функции icu в виде списка https://www.sqlite.org/cgi/src/dir?ci=6cb537bdce85e088&name=ext/icu, тогда достаточно расширения icu.

При создании расширения icu я не могу назвать его libSqliteIcu.so, так как этот readme сказал b / c, когда я загружаю его, я получил эту ошибку

sqlite> .load ./libSqliteIcu.so
Error: dlsym(0x7fa073e02c60, sqlite3_sqliteicu_init): symbol not found

Задав вопрос в sqlit mail list Мне сказали, что я подтверждаю.

Имя символа - sqlite3_icu_init. При загрузке модуля lib<x>.so вызывается символ sqlite3_<x>_init. Вам нужно либо (а) переименовать общую библиотеку на правильное имя (libicu.so), либо передать имя функции инициализации (sqlite3_icu_init) загрузчику при загрузке модуля, либо (б) изменить имя * Функция 1018 * в источнике icu.c соответствует имени, которое ищет загрузчик модулей ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...