Как построить boost :: locale для android

У меня есть проект, который имеет Boost 1.64, который работает на Android. теперь мне нужно включить boost::locale библиотека, которая зависит от ICU / ICONV ЛИЭС.
я скачиваю https://github.com/pelya/libiconv-libicu-android, и скомпилировал это успешно. Потом добавляю список

(APPEND BOOST_FLAGS  boost.locale.icu=on -sICU_PATH=MY_PATH/libiconv-libicu-android-master/armeabi-v7a -sICONV_PATH=MY_PATH/libiconv-libicu-android-master/armeabi-v7a)

в мой файл cmake. Но, к сожалению, журнал буста все еще говорит мне:

Performing configuration checks

- 32-bit                   : no  (cached)
- 64-bit                   : yes (cached)
- arm                      : yes (cached)

Сборка Boost C ++ библиотек.

- symlinks supported       : yes (cached)
- zlib                     : yes (cached)
- iconv (libc)             : no  (cached)
- iconv (separate)         : no  (cached)
- icu                      : no  (cached)
- icu (lib64)              : no  (cached)
- Boost.Locale needs either iconv or ICU library to be built.
- Boost.Locale needs either iconv or ICU library to be built.
- Boost.Locale needs either iconv or ICU library to be built.
- Boost.Locale needs either iconv or ICU library to be built.
- Boost.Locale needs either iconv or ICU library to be built.
- Boost.Locale needs either iconv or ICU library to be built.
- has_icu builds           : no  (cached)

от boost::locale В официальном документе я считаю, что библиотеки ICU являются общими библиотеками, но libiconv-libicu-android предоставляет только статические библиотеки. Это имеет значение?

надеюсь, кто-нибудь может помочь, заранее спасибо.

0

Решение

Наконец, я сделал это с помощью libicon-libicu-android [https://github.com/pelya/libiconv-libicu-android]. Чтобы убедиться, что компилятор для компиляции вашего проекта и libiconv-libicu совместимы. Я столкнулся с проблемой, которая вызвана другой редакцией Android ndk. кажется libicon-libicu использовать ndk-15 & LLVM. но наш проект использует ndk 10. Я сталкиваюсь с ошибкой соединения, когда ld пытается связать libiconv. поэтому, пожалуйста, убедитесь, что ваш проект использует совместимый ndk с libiconv-libicu. если нет, попробуйте изменить файл setCrossEnvironment-XXX.sh, чтобы сделать его совместимым. Кроме того, boost имеет libiconv, так как достаточно backend. поэтому часть построения icu lib в sh может быть проигнорирована.
когда libiconv.so или libiconv.a готовы, вы устанавливаете переменную boost compile: -sICONV_PATH = / your_iconv_path. если все пойдет хорошо, вы можете получить boost :: locale lib.

Кстати, вы можете отладить ошибку повышения из config.log и boost_ (shared / static) .log. если boost_ (shared / static) .log имеет
— символические ссылки поддерживаются: да
— zlib: да
— iconv (libc): нет
— iconv (отдельно): да
— has_icu строит: нет
Вы должны успешно скомпилировать boost :: locale. Если опция all iconv показывает «нет», вам следует прочитать config.log, чтобы найти причину, если вы указали путь libiconv. Похоже, система сборки Boost :: locale попытается создать очень простую демонстрацию iconv для проверки env. если это не может быть построено полностью, Boost выдаст ошибку в config.log. Попытка выяснить, почему это не работает, всегда полезно.

Надеюсь, что вы будете плавно строить android boost :: locale.

0

Другие решения

Других решений пока нет …