2012-12-17 51 views
4

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

我的代码是:

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 *, ?)' 

这从MinGW的对CDT头:

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

这从Android NDK头:

extern void* memcpy(void *, const void *, size_t); 
+0

您是否在文件的开头添加了'#include '? –

+0

@MārtiņšMožeiko是的,有#include Ricardo

+3

请注意,这不是从ndk编译器错误,而是不必要的Eclipse插件迂腐。 –

回答

8

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

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

接近底部有我自己用的是一个合理的解决办法:

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

走进C/C++打造专业化\工具链编辑

确保Android的GCC是所选择的工具链和Android Builder是所选择的建设者。

点击“选择工具” 选择“允许所有更改” 删除了Android GCC编译 添加“GCC C编译器”和“GCC C++编译器”,这样我们可以索引C和CPP头。

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

走进C/C++编译\查找选项 更改发现配置文件范围“配置范围” 确保发现谱使用“AndroidPerProjectProfile”,并确保这两个复选框被选中。

然后我必须手动添加自己的包括Project Properties -> C/C++ General -> Paths and Symbols

值得注意的是你的代码编译罚款下的目录和definies。如果你喜欢,你可以关闭索引,但如果你仍然想要索引的优点,你必须解决这个问题。

0

另一个解决方法是:

打开android native角度来看,

project navigator您的项目上单击右键,

,并在index选项单击重建索引。