将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
选项以重建索引。