如何在安卓下指定 STL 库

How to specify STL library under Android?

本文关键字:STL      更新时间:2023-10-16

我们发现了一个试图使用Autotools将我们的项目移植到Android的报告。我们的项目是一个使用 STL 的C++库,Android 让开发者选择一个C++和 STL 库。该项目是基于生成文件的,不使用自动工具。相反,它发布了针对Android的交叉编译程序。

报告的重点是标题检查失败。我们认为它失败了,因为Autotools在执行检查时没有使用STL库。STL 库与 --sysroot 略有不同。Sysroot 将包含许多标头和库,但不包括 STL 标头或库,因为用户应该选择一个。

我想知道如何告诉Autotools在为目标配置时使用Android上的特定STL库。

答案是同时使用独立的工具链和自动工具。例如,对于通用的 arm abi,也使用 c++ stl(gnu 是默认的):

1) 首先使用您需要的任何 --stl 选项创建您的独立工具链。

$> ${ANDROID_NDK_ROOT}/build/tools/make-standalone-toolchain.sh  --toolchain=arm-linux-androideabi-4.9 --stl=libc++ --platform=android-21 --install-dir=${PWD}/tools/ --force

2) 将工具链放在您的路径中,以便配置可以找到工具

export PATH=${PWD}/tools/bin:${PATH}

2a) $TRIPLE env var 有助于配置以检查名为

${TRIPLE}-cc
${TRIPLE}-ld

你会发现上面bin目录中的工具以"arm-linux-androideabi"为前缀。所以设置三重。在此示例中,它是

export TRIPLE=arm-linux-androideabi

2b) 如果您不想设置$TRIPLE,则必须将 CC、CXX 和 CPP env var 设置为指向新工具链 bin dir 中的版本,或者传递它们进行配置(我不知道如何配置)。

3)最后运行Autotools并告诉它使用独立的工具链作为它的sysroot

$>./configure --with-sysroot=${PWD}/tools/sysroot --host=${TRIPLE} ...
相关文章:
  • 没有找到相关文章