jni/opencv2/core/core.cpp:5:20: error: No such file or directory

本文介绍了一种解决Android NDK编译时遇到的“多个目标匹配”错误的方法。通过修改Application.mk文件并清理编译目录,成功解决了编译过程中出现的问题。

但是我的根目录下有这些文件,查询后发现在stackoverflow 发现了,可能是我需要在Application.mk file中写上这条语句

 "APP_STL:=stlport_static" .


# The ARMv7 is significanly faster due to the use of the hardware FPU
APP_STL := stlport_static  

APP_CPPFLAGS := -frtti -fexceptions  

APP_ABI := armeabi armeabi-v7a
APP_PLATFORM := android-9


在编译NDK库的时候,遇到一个问题,
当输入$NDK/ndk-build的时候,出现以下错误:

/workspace/aNDK_Test/obj/local/armeabi/objs/wiki_andktest_HelloJni/wiki_andktest_HelloJni.o.d:1: 
*** 多个目标匹配。 停止。
解决办法是:
进入目录:/workspace/aNDK_Test/obj/local/armeabi/objs/wiki_andktest_HelloJni
删除掉该目录下的所有内容,重新使用$NDK/ndk-build命令进行编译即可; 



<think>好的,我现在需要解决用户在Android NDK r10e编译环境下遇到的“fatal error: vector: No such file or directory”问题。用户之前的问题是关于如何将SimCard.cpp和libOPSCMCC1.so编译成新的libOPSCMCC.so,现在遇到了头文件缺失的问题。 首先,我应该回顾用户之前的配置。用户可能在使用ndk-build,并且可能没有正确配置STL支持。在Android NDK中,vector属于C++标准,需要正确的STL支持。可能用户的Android.mk中没有指定APP_STL,导致编译器找不到vector头文件。 接下来,我需要考虑NDK r10e的版本特性。这个版本可能默认使用的STL是system,而system可能不包含完整的C++支持。用户需要显式指定使用gnustl_static或者stlport_static等支持更好的STL实现。 另外,用户可能没有在Application.mk中设置APP_STL,或者指定的ABI与STL支持的ABI不匹配。例如,如果用户编译的是armeabi-v7a,但对应的STL可能没有正确链接。 还需要检查NDK的目录结构,确保头文件路径正确。NDK r10e的STL头文件通常位于sources/cxx-stl目录下,可能用户的环境变量或NDK路径配置有误,导致编译器找不到这些头文件。 另外,用户可能在编译时没有启用C++11或更高版本的支持,而代码中可能使用了需要C++11的vector特性,比如初始化列表等。这时需要在编译选项中添加-std=c++11。 此外,可能用户的代码中包含了错误的头文件路径,或者没有包含必要的C++标准头文件。需要检查代码中的include语句是否正确,是否有拼写错误。 还需要考虑NDK工具链的问题。用户可能使用了不正确的工具链版本,导致C++标准路径没有被正确包含。可以建议用户检查NDK_TOOLCHAIN_VERSION的设置,确保与APP_STL兼容。 最后,可能用户的环境变量配置有问题,比如NDK_HOME没有正确设置,导致编译器找不到所需的STL头文件路径。需要用户确认NDK路径是否正确,并重新配置环境变量。 综合这些可能性,我应该分步骤给出解决方案:首先检查STL配置,确保APP_STL正确设置;然后确认NDK版本和工具链;接着检查头文件路径和编译选项;最后验证环境变量和NDK安装完整性。同时,结合用户之前的项目结构,可能需要调整Android.mk和Application.mk中的相关设置。</think>### Android NDK R10e vector头文件缺失解决方案 #### 一、问题根源定位 `vector`头文件属于C++标准模板(STL),该错误通常由以下原因导致: 1. **STL运行时未正确配置**:NDK默认使用最小C++运行(system) 2. **工具链不匹配**:未选择支持完整STL的工具链版本 3. **ABI兼容性问题**:目标架构与STL实现不匹配(参考引用[3]的ABI说明) #### 二、具体解决步骤 1. **修改Application.mk** 增加STL配置(NDK r10e推荐配置): ```makefile APP_STL := gnustl_static # 使用GNU STL静态 APP_CPPFLAGS += -std=c++11 # 启用C++11标准(引用[1]的编译参数思路) ``` 2. **调整Android.mk配置** 添加STL链接指令: ```makefile LOCAL_CPP_FEATURES += rtti exceptions # 若需RTTI和异常支持 LOCAL_CPPFLAGS += -frtti -fexceptions LOCAL_LDFLAGS += -latomic # 针对某些ABI需要原子 ``` 3. **验证NDK包含路径** 确保NDK包含路径正确(示例路径): ``` $NDK_HOME/sources/cxx-stl/gnu-libstdc++/4.9/include $NDK_HOME/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi-v7a/include ``` 4. **完整配置示例** ```makefile # Application.mk APP_ABI := armeabi-v7a APP_PLATFORM := android-19 APP_STL := gnustl_static NDK_TOOLCHAIN_VERSION := 4.9 # 与APP_STL版本对应(引用[3]工具链版本关联) ``` #### 三、编译验证 执行编译命令时添加详细输出: ```bash ndk-build V=1 2>&1 | grep -i include # 查看实际使用的包含路径 ``` #### 四、替代方案(若仍失败) 1. **升级STL实现**: ```makefile APP_STL := stlport_static # 使用STLport实现 ``` 2. **手动指定包含路径**: ```makefile LOCAL_C_INCLUDES += $(NDK_HOME)/sources/cxx-stl/gnu-libstdc++/4.9/include ``` #### 五、调试技巧(引用[2]调试方法延伸) ```bash # 检查最终编译命令中的包含路径 adb shell "setprop debug.ld.all dlerror,dlls; export LIBC_DEBUG=1" ``` --相关问题--: 1. 如何选择Android NDK中的STL实现版本? 2. NDK编译时出现"undefined reference to std::__throw_bad_alloc()"如何解决? 3. 不同Android API Level对C++标准支持有何差异?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值