我是 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++ Build \ Tool Chain 编辑器
确保 Android GCC 是选定的工具链,Android Builder 是选定的构建器。
点击“选择工具”
选择“允许所有更改”
删除 Android GCC 编译器
添加“GCC C Compiler”和“GCC C++ Compiler”,以便我们可以索引 c 和 cpp 头文件。
如果您查看“路径和符号”,您会发现我们有 GNU C 和 GNU C++ 语言,但是内置的包含路径当然是错误的。幸运的是,有一个解决办法。
进入 C/C++ 构建 \ 发现选项
将发现配置文件范围更改为“配置范围”
确保 Discovery 配置文件使用“AndroidPerProjectProfile”并确保选中两个复选框。
然后我必须手动添加我自己的包含目录和定义Project Properties -> C/C++ General -> Paths and Symbols
值得注意的是你的代码compiles美好的。如果您愿意,可以关闭索引,但如果您仍然想要利用索引的优势,则必须解决该问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)