2012-12-17 49 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選項單擊重建索引。