4

我是 C/C++ 和 Android NDK 的初学者,在尝试创建本机库时遇到问题。我的代码在 CDT 上使用 MinGW 进行编译,但是当我在 JNI 文件上编写相同的代码时,出现错误。

我的代码是:

int n = 7;
int positions[n];   
int final_order[n];

memcpy(positions, final_order,sizeof(final_order));

该插件向我展示了:

Invalid arguments 'Candidates are: void * memcpy(void *, const void *, ?)'

这是 CDT 上 MinGW 的标头:

_CRTIMP void* __cdecl __MINGW_NOTHROW   memcpy (void*, const void*, size_t);

这是来自 Android NDK 的标头:

extern void*  memcpy(void *, const void *, size_t);
4

2 回答 2

8

使用 Eclipse 进行 NDK 开发时存在一个已知的索引问题。

在这里阅读:https ://code.google.com/p/android/issues/detail?id=33788

在底部附近有一个我自己使用的合理解决方法:

我们想要的是使用 Android GCC 工具链,但更改实际工具并修改发现选项,以使包含路径和符号正确。

进入 C/C++ Buid \ 工具链编辑器

确保 Android GCC 是选定的工具链,并且 Android Builder 是选定的构建器。

单击“选择工具” 选择“允许所有更改” 删除 Android GCC 编译器 添加“GCC C 编译器”和“GCC C++ 编译器”,以便我们可以索引 c 和 cpp 标头。

如果您查看“路径和符号”,您会发现我们同时拥有 GNU C 和 GNU C++ 语言,但当然内置的包含路径是错误的。幸运的是,有一个解决方法。

进入 C/C++ Build \ Discovery Options 将发现配置文件范围更改为“配置范围”确保发现配置文件使用“AndroidPerProjectProfile”并确保选中两个复选框。

然后我必须手动添加我自己的包含目录和定义Project Properties -> C/C++ General -> Paths and Symbols

值得注意的是,您的代码编译良好。如果您愿意,您可以关闭索引,但如果您仍然想要索引的优势,您将不得不解决这个问题。

于 2013-08-16T15:42:48.290 回答
0

另一种解决方法是:

打开android native视角,

右键单击您的项目project navigator

并单击index选项以重建索引。

于 2013-12-07T11:49:38.067 回答