Eclipse+NDK+adt+cdt开发环境问题解决

概述


本文描述了在Eclipse环境下进行NDK开发时遇到的问题及相关解决方法。
问题列表:
* Unresolved inclusion: Unresolved inclusion:
* memcpyInvalid arguments问题

这几个问题不影响程序的编译,但会导致无法在Eclipse中进行运行程序等操作。

开发环境


  • Windows XP
  • Eclispe Luna
  • cdt-8.6.0
  • adt-23.0.4
  • android-ndk-r10e
  • android-sdk_r23.0.2-windows

注:解决问题前请确保项目无误,可使用ndk-build编译。且Eclipse SDK、NDK路径已配置完毕

Unresolved inclusion问题


错误描述

项目添加NDK支持后,项目中包含的平台相关头文件及std库头文件等均出现Unresolved inclusion提示。
使用ndk-build命令进行编译并没有错误提示。

问题解决

清除旧的NDK配置

关闭Eclispe,删除项目目录下的.cporject文件。
修改.project文件,删除包含’cdt’的配置段。

<buildCommand>
    <name>org.eclipse.cdt.managedbuilder.core.genmakebuildername>
    <triggers>clean,full,incremental,triggers>
    <arguments>
    arguments>
buildCommand>
<buildCommand>
    <name>org.eclipse.cdt.managedbuilder.core.ScannerConfigBuildername>
    <triggers>full,incremental,triggers>
    <arguments>
    arguments>
buildCommand>
org.eclipse.cdt.core.cnature
org.eclipse.cdt.core.ccnature
org.eclipse.cdt.managedbuilder.core.managedBuildNature
org.eclipse.cdt.managedbuilder.core.ScannerConfigNature

注:若尚未添加NDK支持,可忽略此步骤

重新添加NDK支持

项目右键Android Tools -> Add Native Support...

添加NDK库相关路径

在菜单栏Project -> Propertis中,C/C++ General -> Paths and Symbols下,Include标签页下,添加如下路径。

$NDK_PATH\platforms\android-19\arch-arm\usr\include
$NDK_PATH\sources\cxx-stl\gnu-libstdc++\4.8\include
$NDK_PATH\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a\include

注:此时,Unresolved inclusion提示应已经消失,但仍存在Symbol 'string' could not be resolved之类提示。

重建C/C++索引

菜单栏Project -> C/C++ Index -> Rebuld
至此,Resolve相关问题全部解决完毕。

注:网上部分教程未提到添加$NDK_PATH\sources\cxx-stl\gnu-libstdc++\4.8\libs\armeabi-v7a\include,不添加此路径无法解决Symbol 'string' could not be resolved问题。

Invalid arguments问题


错误描述

调用memcpyvector.resize()等函数时,Eclipse提示

Invalid arguments '
Candidates are:
void resize(?)
void resize(?, const float &)
' 

临时解决方案

Project -> Propertis中,修改C/C++ General -> Code Analysis配置,将Invalid arguments项由Error修改为Warning
尽管该方法会解决我们的问题,但会导致真正的Invalid arguments错误也会被忽略。

注:网络上有人提到在C/C++ General -> Preprocessor...中,修改’Provicer’页签下的配置,勾选CDT GCC Built-in Complier Settings[Shared]选项,但我测试并没有解决该问题。

参考资料


  • Eclipse giving me Invalid arguments ’ Candidates are: void * memset(void *, int, ?) ’ though I know the args are good
  • Unresolved inclusion error while using NDK
  • 解决NDK开发中Eclipse报错“Unresolved inclusion jni.h”的最终方法
  • Code analysis “Invalid Argument” reports invalid argument which is valid

你可能感兴趣的:(Eclispe,NDK,Android开发)