首页 > 解决方案 > 编译器(clang,android ndk r18)找不到 stl_algobase.h

问题描述

自从 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++',但是编译器会给出这个额外的错误:'fatal error: 'vector' file not found'

我的第一个想法是,由于某种原因,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++?

标签: android-ndk

解决方案


您需要make clean或您的项目的等价物是什么。您的 out 目录中有陈旧的依赖文件。


推荐阅读