android-ndk - 编译器(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++?
解决方案
您需要make clean
或您的项目的等价物是什么。您的 out 目录中有陈旧的依赖文件。
推荐阅读
- java - Java Maven 无法找到或加载主类
- php - 从存储在 MYSQL 数据库中的逗号分隔字符串中显示唯一的第一项
- php - 如何从 pluck laravel 中获取价值
- angular - 开关元素的 Nativescript 数组 | 点击按钮读取值的技巧
- spring-boot - Spring boot devtools 不考虑排除属性
- javascript - 在计算年龄差异时收到警告?
- c++ - 使用 QGraphicsView 进行图像流式传输
- apache-spark - spark不使用合并模式从不同文件夹读取所有orc文件
- google-bigquery - 如何从 bigquery 中的 JSON 字段存储中提取数据
- c++11 - bad_lexical_cast c++ 中的异常处理