我有一个提升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 :(得分:0)
最后,我通过使用libicon-libicu-android [https://github.com/pelya/libiconv-libicu-android]使其成功。要确保编译项目的编译器和libiconv-libicu兼容。我遇到了由不同版本的android ndk引起的问题。似乎libicon-libicu使用ndk-15& LLVM。但我们的项目使用ndk 10.我在ld尝试链接libiconv时遇到链接错误。所以请确保您的项目使用与libiconv-libicu兼容的ndk。如果没有,请尝试修改setCrossEnvironment-XXX.sh文件以使其兼容。另外,boost有libiconv作为后端就足够了。所以在sh中构建icu lib的部分可以忽略不计。 当libiconv.so或libiconv.a准备就绪时,设置boost编译变量:-sICONV_PATH = / your_iconv_path。如果一切顺利,你可以获得boost :: locale lib。
顺便说一句,您可以从config.log和boost_(共享/静态).log调试boost错误。如果boost_(共享/静态).log有 - 支持符号链接:是的 - zlib:是的 - iconv(libc):没有 - iconv(单独):是的 - has_icu build:no 你应该成功编译boost :: locale。如果所有iconv选项显示" no",您应该阅读config.log以查找已分配libiconv路径的原因。 Boost :: locale构建系统似乎将尝试构建一个非常简单的iconv演示来验证env。如果无法完全构建,Boost将在config.log中显示错误。试图弄清楚它为什么不起作用,总是有帮助的。
希望你能顺利构建android boost :: locale。