これはばかげているように感じますが、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!"
Eclipse Indigo内でコードが正常にコンパイルされたにもかかわらず、CDTレポートエラーの同様の問題が発生しました。
プロジェクト>プロパティ>設定>バイナリパーサー> "GNU Elf Parser"
私の場合に役立ちました。 「エルフパーサー」をチェックしてもらいました。
これは、以前に他の多くの人がEclipse CDTで抱えていた問題のようです。 Eclipseをシャットダウンしてから再起動することで十分な場合もあります。そうでない場合は、以下を参照してください。
インクルードを確認してください:include<math.h>
を使用している場合は、include<cmath>
に変更してください。 stdio.h
とstdlib.h
についても同様ですが、cstdio
とcstdlib
に置き換える必要があります。別のオプションは、プロジェクトをC++ではなくCプロジェクトに変更することです。
私にとっては、特定の「ソースの場所」フォルダを追加し、デフォルトを削除することで解決しました。ルナでは、それは以下のとおりです。
プロジェクト>プロパティ> C/C++一般>パスとシンボル>ソースの場所
ビルド設定に-lmオプションがありません。プロジェクト->プロパティ->設定-> Misscleanous->その他(リンカー)フラグ[]