0

我有一个项目,它的 boost 1.64 可以在 android 上运行。现在,我需要启用boost::locale依赖于ICU/ ICONVlibs 的库。我下载了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 只提供静态库。有关系吗?

希望任何人都可以提供帮助,在此先感谢。

4

1 回答 1

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 库。

顺便说一句,您可以从 config.log 和 boost_(shared/static).log 调试 boost 错误。如果 boost_(shared/static).log 有 - 支持的符号链接:是 - zlib :是 - iconv (libc) :否 - iconv (单独):是 - has_icu 构建:不你应该编译 boost::locale 成功。如果所有 iconv 选项都显示“no”,您应该阅读 config.log 以查找是否已分配 libiconv 路径的原因。Boost::locale 构建系统似乎会尝试构建一个非常简单的 iconv 演示来验证环境。如果不能完全构建,Boost 将在 config.log 中显示错误。试图弄清楚为什么它不起作用,总是有帮助的。

希望你能顺利构建 android boost::locale。

于 2017-10-27T10:58:51.380 回答