在windows下进行ndk交叉编译boost时,遇到
libiconv/1.16库报错,提示无法识别windows子系统,需要安装msys2/cygwin或指定
build_require来解决这个问题。以下是解决方案的详细说明:
在Linux下进行交叉编译时不会遇到此问题,因为在Windows下编译
libiconv/1.16需要依赖MSYS2环境来执行bash shell脚本。问题的根源在于没有指定
-pr:b参数(即
--profile:build)。
通常情况下,交叉编译时只需使用
-pr:h参数指定目标主机的profile文件即可,但对于
libiconv/1.16这样的库,在Windows下编译时必须使用MSYS2环境。
以下是
libiconv/1.16的
conanfile.py中相关的代码片段:
def build_requirements(self):
if self._settings_build.os == "Windows" and not tools.get_env("CONAN_BASH_PATH"):
self.build_requires("msys2/cci.latest")如果不指定
-pr:b参数,上述条件将不成立,导致编译
libiconv时没有MSYS2环境。
因此,在这种情况下,进行交叉编译时不仅需要使用
-pr:h指定目标主机的profile文件,还需要使用
-pr:b参数指定编译主机的profile。通常情况下,
-pr:b参数可以设置为
default,使用默认的profile。
正确的执行命令如下:
$ conan install boost/1.69.0@ -pr:h android_armv7a_clang -pr:b default --build missing -o without_stacktrace=True
指定了
-pr:b default后,执行时会自动下载并安装MSYS2。

关于Boost的交叉编译,可以参考之前的博客:《conan入门(十):Windows下Android NDK交叉编译Boost》。












