【问题标题】:Migrate a C program to Android NDK将 C 程序迁移到 Android NDK
【发布时间】:2012-12-17 23:46:28
【问题描述】:

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

【问题讨论】:

  • 文件开头加#include <string.h>了吗?
  • @MārtiņšMožeiko 是的,有一个#include
  • 请注意,这不是 ndk 的编译器错误,而是不必要的 eclipse 插件过于迂腐。
  • @ChrisStratton 有办法在插件上更改它吗?忽略?
  • 我确信有办法改变 C 插件的行为,但我发现禁用(或者更准确地说,甚至从不安装)插件更简单。 NDK 的实际编译器与插件不同,后者是工具集中相对较新的新增功能。

标签: android c android-ndk


【解决方案1】:

在使用 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 Compiler”和“GCC C++ Compiler”,以便我们可以同时索引 c 和 cpp 头文件。

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

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

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

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

【讨论】:

    【解决方案2】:

    另一种解决方法是:

    打开android native 透视图,

    project navigator中右击你的项目,

    然后单击index 选项来重建索引。

    【讨论】:

      猜你喜欢
      • 2015-12-14
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      • 2011-03-13
      • 1970-01-01
      相关资源
      最近更新 更多