7

私はNDKを使用するアプリに取り組んでいます(私が書いているのはr6bとr8dの両方で起こったすべてです)

すべてが正常に機能していたので、Cコードのデバッグを開始して試してみたかったのです。

このhttp://tools.android.com/recent/usingthendkpluginチュートリアルに従いましたがNDK_DEBUG = 1、ビルドコマンドにタグを付けると、Android 4.2から変更して、そのタグを削除しても消えないコードで突然エラーが発生し始めました。 2 2.2に戻り、使用していたNDKを変更するか、他に考えられることは何でも。

問題は、このようなステートメント内で発生します

#ifdef __ANDROID__
some cool android code
#else
some pretty awesome iOS code
#endif

__ANDROID__なんらかの理由で定義されていないために日食が発生ndk-buildし、Androidの代わりにiOSコードをコンパイルしようとするとどうなりますか

私がしたことすべてを元に戻すことは何の効果もないようです。日食を再開することもしませんでした。プロジェクトをクリーンアップし、完全に削除するlibsと、objディレクトリも機能しませんでした。

助言がありますか?

ありがとう!

編集:

たぶん、ndk-buildを使用したビルド自体が正常に完了することを追加する価値があります。日食の問題かもしれないと思いますが、それでもエラーでアプリを起動できません

また、念のため、コンピュータの再起動も機能しませんでした。

編集2:ネットワーク上で同じワークスペースを実行している別のコンピューターに問題があります。おそらくワークスペースに関連するものだったので、.metadataフォルダーを削除してプロジェクトを再度追加してみました。

フォルダを削除する.metedataと初めて修正されましたが、数分後(タブレットでアプリをビルドして実行できた)、同じ問題が返され、削除して.metadataも機能しませんでした

編集3:

まだ行きません。

ただし、Eclipseでネイティブサポートを使用しているすべてのプロジェクトがこれを実行しているため、これはプロジェクト固有の問題ではないことを確認できます。

動作しないその他の事項:

  • 空のプロジェクトを作成し、ネイティブサポートを追加します。
  • 別の無関係なワークスペースに完全に変更し、上記のテストを実行します
  • Eclipseの新しいバージョン(juno)をダウンロードし、CDTADT(Eclipse ADTバンドルを使用していました)
4

3 に答える 3

12

ちょうどあなたが知っているので:

  • Android.mkファイルとを操作する場合ndk-buildANDROIDマクロは事前定義されています(-DANDROID詳細出力を使用してビルドする場合は、追加のCフラグを参照してください)。
  • ただし、Androidスタンドアロンツールチェーンを使用する場合は、__ANDROID__代わりに事前定義されています。

だから私はあなたが使用することをお勧めします:

#if defined(ANDROID) || defined(__ANDROID__)
  /* ... */
#endif
于 2013-03-11T09:54:02.080 に答える
5

どうやら、正しいオプションが提供されるたびに内部的に定義することになっている__ANDROID__特定のGCCマクロです。__ANDROID__ただし、オプションの制御は主にNDKに委任されているため、マクロが定義されていることに依存するべきではありません。NDKの背後にあるコンパイラは、私たちが知っている(または気にかけている)すべての人にとってGCCではないかもしれません。NDKを使用する場合は、を確認してくださいANDROID

編集:clangは__ANDROID__マクロも定義するようになりました

于 2015-01-30T16:19:59.867 に答える
1

他の誰かがこの問題に遭遇した場合:

別のコンピューターでワークスペースを開きましたが(ワークスペースはDropboxフォルダーにあります)、問題は他のコンピューターにも残っていました。これはワークスペースの問題を意味するだけなので、ワークスペースから.metadataフォルダーを削除します。

プロジェクトを再度追加する必要がありましたが、追加した後、すべてが機能しているようです。

于 2013-03-11T00:58:21.807 に答える