2017-10-12 214 views
0

我有一个项目,它具有可以在android上运行的1.64版本。现在,我需要启用boost::locale库,它依赖于/ICONV库。 我下载https://github.com/pelya/libiconv-libicu-android,并成功编译。然后我添加列表如何为Android构建boost :: locale

(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

我试过在32位android上编译iconv并且工作。但64位仍然失败,任何人都可以击中 –

回答

0

最后,我通过使用libicon-libicu-android [https://github.com/pelya/libiconv-libicu-android]。要确保编译器编译项目和libiconv-libicu是兼容的。我遇到了由不同版本的android ndk引起的问题。似乎libicon-libicu使用ndk-15 & llvm。但是我们的项目使用ndk 10.当我尝试链接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_(shared/static).log中调试boost错误。如果BOOST_(共享/静态).LOG具有 - 支持符号链接:是 - zlib的:是 - 的iconv(libc中):无 - 的iconv(独立):是 - has_icu建立:没有 你应该编译升压: :语言环境成功。如果所有iconv选项显示“否”,则应该阅读config.log以查找分配libiconv路径的原因。 Boost :: locale构建系统似乎会尝试构建一个非常简单的iconv演示来验证env。如果不能完全构建,Boost会在config.log中显示错误。试图找出它为什么不起作用,总是有帮助的。

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