编译器(clang,android ndk r18)找不到stl_algobase.h

时间:2018-10-18 11:38:14

标签: android-ndk

自将ndk更新为r18以来,尝试编译某些东西给了我以下错误:

make[1]: *** No rule to make target `/...../toolchains/arm/21/bin/../lib/gcc/arm-linux-androideabi/4.9.x/../../../../include/c++/4.9.x/bits/stl_algobase.h', needed by `something.o'.  Stop.

手动查找文件夹“ bits”显示该文件夹不存在。因此,当然会出现此错误,因为编译器找不到'stl_algobase.h'。

据我所知,“ gnustl,gabi ++和stlport已被删除。” (https://github.com/android-ndk/ndk/wiki/Changelog-r18)因此,“默认情况下将使用libc ++的共享库版本。” (https://developer.android.com/ndk/guides/standalone_toolchain#c_stl_support

我正在使用独立工具链的clang ++和clang编译器以及以下标志:

CXXFLAGS        := -fPIE -fPIC
CXXFLAGS        += -std=c++14

注意:

1)使用'CXXFLAGS + = -stdlib = libstdc ++'相同。

2)我也尝试过'CXXFLAGS + = -stdlib = libc ++',但随后编译器将给出此额外错误:'致命错误:未找到'vector'文件'

我首先想到的是,由于某种原因,stl链接不正确。最有可能缺少某些标志,或者独立工具链的安装错误。这是我的操作方式:

sudo /...../Library/Android/sdk/ndk-bundle/build/tools/make_standalone_toolchain.py --api 21 --install-dir /...../Developer/toolchains/arm/21 --arch arm --force --verbose

如果我想到的是它,该怎么做对呢?还是我没想到的不同之处?如何使用Android NDK在外部Makefile中正确使用libc ++?

1 个答案:

答案 0 :(得分:2)

您需要make clean或任何与您项目等效的项目。您的out目录中有过时的依赖文件。