Компиляция расширения icu sqlite, статически связанного с icu - PullRequest
6 голосов
/ 30 ноября 2009

Я хочу скомпилировать расширение icu sqlite , статически связанное с icu .

Это то, что я пробовал, может быть, ошибка очевидна для вас.

> cd icu/source
> ./runConfigureIcu Linux --enable-static --with-packaging-format=archive
...
> make

> cd ../../icu-sqlite
> gcc -o libSqliteIcu.so -shared icu.c -I../icu/source/common
      -I../icu/source/i18n -L ../icu/source/lib -lsicuuc -lsicui18n -lsicudata
...
> sqlite3
> .load "libSqliteIcu.so"
Undefined symbol utf8_countTrailBytes

Файлы

расширение icu sqlite

Скачать icu.c с sqlite.org

ICU 4.2.1

Загрузить ICU4C с icu-project.org

Мои требования

  • Работает в Linux и Windows
  • Только один файл, который я должен распространять: libSqliteIcu.so.

Есть идеи, что еще я могу попробовать?

Документация

Ответы [ 2 ]

2 голосов
/ 06 декабря 2009

Эта командная строка работала для меня в Linux:

g++ -shared --language c  -o libSqliteIcu.so icu.c  -I../icu/source/common -I../icu/source/i18n -lpthread -lm   -L../icu/source/lib -lsicui18n -lsicuuc -lsicudata  -lpthread -lm 

Обратите внимание на порядок библиотечных файлов и использование g ++ для обеспечения ссылки на среду выполнения c ++, даже если мы компилируем файл C.

NB. Я использовал вывод icu-config --prefix=../icu/source --ldflags.

1 голос
/ 01 июня 2010

Я столкнулся с той же проблемой, что и вы. Вы можете отредактировать icu \ include \ utf8.h и заменить следующие строки

          #ifdef U_UTF8_IMPL
          U_EXPORT const uint8_t 
          #elif defined(U_STATIC_IMPLEMENTATION) || defined(U_COMMON_IMPLEMENTATION)
          U_CFUNC const uint8_t
          #else
          U_CFUNC U_IMPORT const uint8_t /* U_IMPORT2? */ /*U_IMPORT*/ 
          #endif
          utf8_countTrailBytes[256];

с

              const uint8_t countTrailBytes[256];

Это должно сработать.

...