本文描述了在Eclipse环境下进行NDK开发时遇到的问题及相关解决方法。
问题列表:
* Unresolved inclusion:
或Unresolved inclusion:
等
* memcpy
的Invalid arguments
问题
这几个问题不影响程序的编译,但会导致无法在Eclipse中进行运行程序等操作。
注:解决问题前请确保项目无误,可使用
ndk-build
编译。且Eclipse SDK、NDK路径已配置完毕
Unresolved inclusion
问题项目添加NDK支持
后,项目中包含的平台相关头文件及std
库头文件等均出现Unresolved inclusion
提示。
使用ndk-build
命令进行编译并没有错误提示。
关闭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支持,可忽略此步骤
项目右键Android Tools -> Add Native Support...
在菜单栏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
之类提示。
菜单栏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
问题调用memcpy
、vector.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]
选项,但我测试并没有解决该问题。