将C程序迁移到Android NDK

我是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); 

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

请在此处阅读: https : //code.google.com/p/android/issues/detail?id = 33788

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

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

进入C / C ++ Buid \ Tool Chain编辑器

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

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

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

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

然后我必须在Project Properties -> C/C++ General -> Paths and Symbols下手动添加我自己的include目录和definies

值得注意的是,您的代码编译得很好。 如果您愿意,可以关闭索引编制,但如果您仍然希望索引编制的优势,则必须解决此问题。

另一个解决方法是:

打开android native视角,

project navigator右键单击project navigator

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