6

Android/NDK混合プロジェクトでEclipseIndigoを使用しています。C ++の性質を追加しましたが、ほとんどすべてが機能しています。自動ビルドは機能します。つまり、ファイルを編集すると、ndk-buildが呼び出され、正常に完了します。ビルドエラーは発生しません。マウスオーバーコードアシストが機能します(関数に関する情報が表示された小さなウィンドウがポップアップ表示されます)。インクルード行にカーソルを置いてF3キーを押すと、関連するヘッダーファイルが開きます(構成に基づいて予想されるファイルではなく、関連するヘッダーファイル-おそらく手がかりですか?)。

.cppファイルで次の行を選択すると、$ NDKROOT / platform / android-3 / arch-arm / usr / include/ctype.hが開きます。

#include <ctype.h>

(isdigitはこのファイルで定義されています)

ただし、Eclipseはisdigitが定義されていないと主張しています。静的アナライザーまたはインデクサーのいずれかが原因であることを示唆する多くの投稿を読みましたが、提案された解決策の多くを試しましたが、役に立ちませんでした。

次のような行を追加すると、エラーがなくなり、関数のマウスオーバーコードアシストが機能します。

extern int isdigit(int);

繰り返しますが、これはリンカーエラーやコンパイラエラーではありません。ndk-buildはエラーなしで完了します。これは日食の中の何かです。ご覧いただきありがとうございます!

編集:私は今、これがコード分析の問題であると信じています。より良い解決策は、コード分析オプションを編集して、「関数を解決できませんでした」をエラーではなく警告にすることです。そうすれば、問題ビューで警告を確認できますが、引き続き機能します。関数が本当に欠落している場合、コンパイラはあなたに教えてくれます!また、すべての「欠落している」関数がシンボリックリンクされたインクルードファイルにあるため、問題はシンボリックリンクに続くコードアナライザーにあるという新しい理論があります。この理論に関する意見をお聞かせください。

4

5 に答える 5

5

このような問題に数日取り組んだ後、私は問題に対処するために次のレシピを開発しました。

それがあなたや他の人に役立つことを願っています:

要約:通常、Eclipseでの問題は、Eclipse構成の問題が原因です。ndk_build以下は、C ++コードがまたはndk_build.cmd(Windows上で)で正常にビルドされていることを前提としています。

  • Eclipse juno(4.2)とCDTバージョン8.1には喜びはありません。Eclipseインディゴ(3.7)を使用する

  • 「新しいソフトウェアのインストール」を調べて、インディゴ用のCDTがインストールされ、有効になっていることを確認します(バージョン8.0X)。デフォルトではインストールされていますが、一部のダウンロードではindigoで有効になっていません。

  • ネイティブコードまたはネイティブコードのAndroid構成を扱っている場合は、JavaではなくEclipseのC ++/Cパースペクティブにいることを確認してください。これは欺瞞的ですが、Javaの観点から利用できるオプションのサブセットしかありません。「プロジェクト>プロパティ」を実行するときに「C/C ++一般」を選択肢として表示すると、C ++/Cの観点であると確信できます。

  • 通常の問題は、C / C ++-landのインデクサーが、エラーがない場合にエラーがあると見なすということです(たとえば、ndk-buildを使用したビルドは問題なく動作します。多くの場合、これはコンソールウィンドウでも確認できます)。これは、最初のタブの[プロジェクト]>[プロパティ]>[C /C++一般]の[パスとシンボル]の部分にある不正なパスが原因で発生します。

  • この問題を解決するための主なツールは、プロジェクトを右クリックし、[インデックス]と[未解決のインクルードの検索]を選択することです。これにより、見つからないファイルがわかります。これらは通常ファイルに小さなピンクのマークが付いているファイルではありません。

  • 適切なファイルを見つけるには、NDKROOTディレクトリ(NDKをインストールした場所)を検索します。追加する典型的なものは次のとおりです。 ${NDKROOT}/platforms/android-9/arch-arm/usr/includeまたは、Androidターゲットに適したandroid-N。androidの複数のバージョンとC++標準ライブラリのコピーがあるため、NDKには標準インクルードディレクトリのコピーが多数あります。

2つの大きな警告

  • [プロパティ]>[C/ C++一般]/[パスと設定]でインデクサー構成を変更しても、eclipseの[未解決のインクルード]ビューは自動的に更新されないため、毎回必ず再実行してください。日食のほとんどのビューは、この更新を適切に行います!

  • また、日食エディタのソースコードビューにある小さな赤/ピンクのエラーマーカーも自動的に更新されません。エラーが修正されたことを検出するには、何らかの方法でファイルを「タッチ」する必要があります。

于 2012-07-19T13:10:16.697 に答える
2

私は自分の質問で提案したアプローチでこの問題を回避しましたが、まだより良い方法を見つけることができませんでした。

于 2012-06-25T22:43:16.740 に答える
2

おそらくこれは役立つでしょう:

  1. [プロジェクト]>[プロパティ]に移動します
  2. C /C++ビルド>設定に移動します
  3. GCCCリンカー>その他の設定に移動します
  4. リンカフラグに以下を追加します:-lc
于 2012-09-03T12:14:33.807 に答える
0

インデクサーを再構築してみましたか?(プロジェクトエクスプローラーのインデックスでプロジェクトを右クリック->再構築)問題が解決する場合があります...以前のバージョンのEclipseからアップグレードした場合、インデクサーのセットアップに問題が発生する可能性があります。インデクサーのデフォルト(設定)を復元してみてください。 c / c ++インデクサー)...これがお役に立てば幸いです–この問題は「狂気」になる可能性があります(頻繁に発生するようです)

于 2012-05-27T16:05:50.943 に答える
0

異なるツールチェーンを使用するLinuxでも同じ問題が発生しました。最も単純なC++コード(helloウィザードで作成されたコードなど)でも、ビルドの問題が発生することなく、構文エラーが発生します。Thorbjorn Jemanderによる別の投稿で指摘されているように、問題はインデクサーにあり、「インクルードのヒューリスティックな結果を許可する」オプションの選択を解除することで解決できます。明示的に:Winsow-> Preferences-> C / C ++->Indexer->上記のオプションの選択を解除します。

その後、エディタでファイルを開き、エディタページ内をクリックすると、強調表示されたエラーが消えることがわかります...

于 2012-08-07T12:50:23.563 に答える