4

私は 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);
4

2 に答える 2

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++ 言語の両方があることがわかりますが、組み込みのインクルード パスはもちろん間違っています。幸いなことに、それに対する修正があります。

C/C++ Build \ Discovery Options に移動します Discovery プロファイルのスコープを「Configuration-wide」に変更します Discovery プロファイルが「AndroidPerProjectProfile」を使用していることを確認し、両方のチェックボックスがオンになっていることを確認します。

次に、独自のインクルード ディレクトリと定義を手動で追加する必要があります。Project Properties -> C/C++ General -> Paths and Symbols

コードが正常にコンパイルされることは注目に値します。必要に応じてインデックス作成をオフにすることもできますが、それでもインデックス作成の利点が必要な場合は、この問題を回避する必要があります。

于 2013-08-16T15:42:48.290 に答える
0

別の回避策は次のとおりです。

android native視点を開き、

でプロジェクトを右クリックするにはproject navigator

オプションをクリックしてindex、インデックスを再構築します。

于 2013-12-07T11:49:38.067 に答える