Компиляция расширения 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];
Это должно сделать трюк.