如何为android构建boost :: locale

时间:2017-10-12 07:10:53

标签: android c++ boost boost-locale

我有一个提升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只提供静态库。这有关系吗?

希望任何人都可以提前帮助。

1 个答案:

答案 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。