Компиляция расширения icu sqlite, статически связанного с icu
Я хочу, чтобы скомпилировать расширение icu sqlite статически привязаны к ОИТ.
это то, что я пробовал, возможно, ошибка очевидна для вас.
> 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 4.2.1
загрузить ICU4C из icu-project.org
Мои Требования
- работает в Linux & Windows
- только один файл, который я должен распространять:
libSqliteIcu.so.
есть идеи, что еще я могу попробовать?
документация
2 ответов
эта командная строка работала для меня в 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.
я столкнулся с той же проблемой, что и вы. Вы можете редактировать 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];
Это должно сделать трюк.