如何为 android 构建 boost::locale

Posted

技术标签:

【中文标题】如何为 android 构建 boost::locale【英文标题】:How to build boost::locale for android 【发布时间】:2017-10-12 07:10:52 【问题描述】:

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

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

【问题讨论】:

我尝试在 32bit android 上编译 iconv 并且可以工作。但是64位还是失败了,谁能给个命中 【参考方案1】:

最后,我通过使用 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。

【讨论】:

以上是关于如何为 android 构建 boost::locale的主要内容,如果未能解决你的问题,请参考以下文章

如何为 android 构建 boost::locale

如何为 Android 构建和简化 Java 代码

如何为Android NDK的gradle构建文件中指定NDK

Firebase Cloud Messaging to Android 工作,但 iOS 失败。如何为 iOS 构建有效负载?

android studio,如何为发布版本制作签名的 apk(使用 KTS 构建文件的 gradle)

如何为 Android 动态壁纸创建设置活动