如何为 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 NDK的gradle构建文件中指定NDK
Firebase Cloud Messaging to Android 工作,但 iOS 失败。如何为 iOS 构建有效负载?