web-dev-qa-db-ja.com

Eclipse Indigo CDT:関数を解決できませんでした

これはばかげているように感じますが、2日間が経過しました... Ubuntu 10.04から10.11に、およびEclipse HeliosからEclipse Indigoにアップグレードした後、次の問題が発生しました。

問題の説明:

Isinf()と呼ばれるmath.hの関数を使用しようとしていますが、isnan()などでも問題が発生します。
プログラムはmakeを使用してコマンドラインで正常にコンパイルし、Eclipseでbuildを使用して正常にコンパイルします。
しかし、Eclipseでプログラムファイルを開くと、isinf()関数呼び出しを再度実行できないと報告されます。
プログラムの内容を新しいプロジェクトと新しいソースファイルに挿入しただけの場合、エラーがすぐに表示されます。
この問題は、Eclipse Helios CDTの11.04では発生しませんでした

質問:

これらのエラーがプログラムファイルが開かれたときにのみ報告され、プログラムのコンパイル時に報告されないのはなぜですか。検出されないエラーがコマンドラインから実行されるのはなぜですか?
利用できる解決策/回避策はありますか?

バージョン情報

Linux Ubuntu 10.11 64ビット
Eclipse CDT Indigo、サービスリリース1、ビルドID:20110916-0149
(Eclipse EE Indigoも使用–違いがある場合)
GNU Make 3.81
gcc 4.6.1-9Ubuntu3

複製するには:

以下で複製する必要のある2つのファイルを見つけてください。

ステップ0。すべてがEclipse以外で問題ないことを確認します
添付のソースファイルをコピーしてファイルを作成
ディレクトリを作成します。 Mkdir FunTest
ソースファイルを「Test.cpp」に保存し、メイクファイルを「makefile」として保存します
コマンドプロンプトを開き、ディレクトリに移動します。 FunTest
「make」と入力してください
./ TestOutと入力します
プログラムは「無限ではない」と応答します

ステップ1。 Eclipseでプロジェクトを作成します
Eclipseを開く
ファイル|新規|既存のコードでMakeFileプロジェクトを選択
[参照]をクリックします–ディレクトリ(FunTest)に移動して[ok]をクリックします
ツールチェーンセレクタから[Linux GCC]を選択します
[完了]をクリックします

ステップ2。エラーを見つける
Build All(Ctrl-B)–エラーなしのプロジェクトビルドをクリックします
プロジェクトエクスプローラーでプロジェクトを開き、ディレクトリ内のファイルを表示します
「Test.cpp」ファイルをダブルクリックします
無限大のラインテストの横にあるエラーアイコンに注意してください
2つのエラーメッセージに注意してください。

Semantic error: Function _isinff could not be resolved 
Semantic error: Function _isinfl could not be resolved

Test.cpp:

include <math.h>

int main(int argc, char **argv)
{

int TestNum = 10;

if (isinf(TestNum) == 0)
    printf("Not infinite\n");


return 0;

}

makefile:

# Specify the compiler
CC = g++

# Specify the compiler flags
CFLAGS += -c

# Specify the files making up the application
SOURCES = Test.cpp
OBJECTS = $(SOURCES:.cpp=.o)
EXECUTABLE = TestOut

all: $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
    $(CC) $(LDFLAGS) $(OBJECTS) $(LDLIBS) -o $@

.cpp.o:
    $(CC) $(CPPFLAGS) $(CFLAGS) $< -o $@

install:
    @echo "Build complete!"
22
myk

Eclipse Indigo内でコードが正常にコンパイルされたにもかかわらず、CDTレポートエラーの同様の問題が発生しました。

プロジェクト>プロパティ>設定>バイナリパーサー> "GNU Elf Parser"

私の場合に役立ちました。 「エルフパーサー」をチェックしてもらいました。

7
Fabian

これは、以前に他の多くの人がEclipse CDTで抱えていた問題のようです。 Eclipseをシャットダウンしてから再起動することで十分な場合もあります。そうでない場合は、以下を参照してください。

コンパイルは可能ですが、Eclipseコンテンツは問題の発生を支援しています

4
Adam Miller

インクルードを確認してください:include<math.h>を使用している場合は、include<cmath>に変更してください。 stdio.hstdlib.hについても同様ですが、cstdiocstdlibに置き換える必要があります。別のオプションは、プロジェクトをC++ではなくCプロジェクトに変更することです。

3
tbellardi

私にとっては、特定の「ソースの場所」フォルダを追加し、デフォルトを削除することで解決しました。ルナでは、それは以下のとおりです。

プロジェクト>プロパティ> C/C++一般>パスとシンボル>ソースの場所

0
andraaspar

ビルド設定に-lmオプションがありません。プロジェクト->プロパティ->設定-> Misscleanous->その他(リンカー)フラグ[]

0
pruzinat