web-dev-qa-db-ja.com

Eclipseは正常にコンパイルされますが、セマンティックエラーが発生します

注:明らかにStackOverflowの繰り返しの質問ですが、-私が見たところでは、人々は方法を見つけられないか、彼らの解決策は私のために機能しません

問題:

Eclipse Juno ADTを使用しています。 NDKを更新しようとするまで、すべてが正常に機能していました。 ndkフォルダー(ndk-r8d)を新しいバージョン(つまりndk-r8e)に置き換え、Paths and Symbols構成でインクルードをg ++ 4.6から4.7に変更しました。

インデックスが壊れているようです:コードをコンパイルできましたが、Eclipseは[ 1 ]および[ 2 ].エラーmainlyは、distanceptqueryIdxなどのOpenCV4Androidで使用されるシンボルから発生します。およびtrainIdx

古い構成にバックアップしようとしても、インデックスは壊れていました!これを変更する方法を見つけることができません。


私が試したこと

  • プロジェクトをクリーンアップする
  • 再構築、更新、および「インデックス」サブメニューの他のすべてのオプション(プロジェクトを「右クリック」した場合)
  • 設定でインデクサーを無効/有効にします
  • trainIdxなどのシンボルがOpenCV4Androidにのみ表示されることをPaths and Symbolsセクションに含めることを確認します。
  • Paths and Symbolsセクションのインクルードの順序を変更します。基本的に、OpenCVインクルードを最初と最後に配置しようとしました。

いくつかの観察

動作していないもの

私はそれが次の理由でCDTインデックスであると仮定します:

  • コマンドラインでは、ndk-build cleanndk-buildを使用してプロジェクトをビルドできます。
  • Eclipseを起動すると、(jniフォルダーから)C++ファイルを開くまでエラーが発生しません。
  • いつでもプロジェクトをビルドできますが、C++ファイルを開いている限り、Field '<name>' could not be resolved.が多いため、アプリケーションを実行できなくなります。
  • C++ファイルを開かない場合、Eclipseはエラーを報告せず、Androidアプリケーションを正常にビルドおよびデプロイできます。

興味深い事実

次のコードは、linequeryIdxptのエラーを報告します。

cv::line(mRgb, keypointsA[matches[i].queryIdx].pt, keypointsB[matches[i].trainIdx].pt, cv::Scalar(255, 0, 0, 255), 1, 8, 0);

次のように書くと、うまくいきます:

cv::DMatch tmpMatch = matches[i];
cv::KeyPoint queryKp = keypointsA[tmpMatch.queryIdx];
cv::KeyPoint trainKp = keypointsB[tmpMatch.trainIdx];
cv::line(mRgb, queryKp.pt, trainKp.pt, cv::Scalar(255, 0, 0, 255), 1, 8, 0);

すべてのOpenCV関数が解決されないわけではありません。ptqueryIdx、およびtrainIdxのみが解決されます。

コメントは大歓迎です。

38
JonasVautherin

Eclipse環境内の選択したプロジェクト設定で、C/C++全般->コード分析->起動に進みます。両方のチェックボックスがオフになっていることを確認してください。プロジェクトを閉じて再度開くか、Eclipseを再起動してプロジェクトを再構築します。

33
Alex Cohn

実際に問題が何であるかを言うのは非常に難しいです。ここにいくつかのアドバイスがあります:

  1. インポートしてビルドしてみてくださいhello-jnijnisamplesフォルダーにあります)。問題なく実行される場合、問題はOpenCVをプロジェクトにリンクすることです。
  2. 更新を忘れたようですAndroid-ndk場所project properties -> c/c++ build -> environment。ここに問題へのリンクがあります ビルドの問題Android NDKプロジェクト
  3. コンソールからプロジェクトをビルドします(ndk-build -B)、Eclipseのすべてのエラーを手動で削除します(Problemsビューですべてのエラーを選択してクリックするだけです) delete)そして今すぐプロジェクトを実行してみてください。この「ハック」は、プロジェクトの実行に役立つ場合があります。
  4. Eclipseを閉じてフォルダーを削除しますpath-to-your-workspace/.metadata/.plugins/org.Eclipse.cdt.core(最初にバックアップします)。
6
ArtemStorozhuk

多くの人と同じように、私も同じ問題を抱えていました。

AyberkÖzgürの投稿の手順に従いましたが、これは理にかなっています。また、3つの言語すべてにインクルードを含める必要がありました:GNU C、GNU C++、and Assembly。スタンドアロンツールチェーン。

私は最初にGNU CおよびGNU C++言語。未解決のインクルードエラーが残っていました。アセンブラー言語もエラーがなくなりました。

Eclipseが私のプロジェクトに含まれているAssemblerを検索するだけの理由はわかりません。また、ソリューションのこの部分がより複雑なプロジェクトでどのように機能するかわかりません。

お役に立てれば。

0
xdaimon

同じ問題がありました。すべての適切なインクルードパスのセットアップがありましたが、.c/.cppまたは.hファイルを開くと、すべてが「未解決」としてマークされ始めました。
これは私のために働いた...
に移動:
環境設定-> C/C++->インデクサー
チェックエディターで開いているインデックスソースとヘッダーファイル

0
Pescolly

Eclipse CDTがOpenCVライブラリと連携して、同様の状況が発生しました。プログラムが正しくコンパイルされている間に、いくつかのエラーメッセージが表示されました。 「window-> preferences-> Indexer」「indexerのビルド構成」ボックスのインデクサー設定を「アクティブ構成を使用」に変更して、問題を解決しました。

0
Pejman Habashi

このEclipse NDKのインデックス作成の問題に頭を打つのに約3時間かかりました!..

何が機能したのか: Your-Application.mkファイルで1つのCPUアーキテクチャのみが指定されていることを確認してください。

そうしないと、.metadata/.plugins/com.Android.ide.Eclipse.ndk/*。pathInfoファイルはNDKビルドによって生成されません。このファイルには、Project-> Properties-> C/C++ General-> Paths and Symbols-> Includesの組み込み値が含まれています(.pathInfoファイルを作成しても問題は修正されません)

0
AccessViolation

[設定]> [C/C++]> [言語マッピング]> [追加]に移動します(ソースCファイルを選択し、GNU C)を選択します)

0
user3163532