У меня есть проект, который имеет 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 предоставляет только статические библиотеки. Это имеет значение?
надеюсь, кто-нибудь может помочь, заранее спасибо.
Наконец, я сделал это с помощью 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.
Других решений пока нет …