0

プログラムを実行しているときに舞台裏で何が起こっているのかを理解するのはひどいです。

私の学校のサーバーでは、メイクファイルを作成する必要があるたびに、gcc とほぼ同じコードを使用しています (笑)。

プログラムをダウンロードして NetBeans でデバッグし、数時間/数日後に..ようやくすべてが機能するようになりました。

ここや他のサイトのいくつかの投稿を見た後、MacBook を使用しているため、なんらかの理由で gcc の代わりに g++ を使用してコンパイルする必要があることがわかりました。よくわかりません..しかし、gccをg ++に変更して、メイクファイルで次の行を実行すると:

編集:

 g++ -c $< -o $@ -std=c++0x -lstdc++

エラーが発生します。しかし、「-std=c++0x」を削除して再度 make を実行すると、すべて問題ありません。

しかし、「メイククリーン」を実行すると、もう一度やり直す必要があります..

プログラムを学校のサーバーに戻すと、すべてが台無しになりますか? それとも、私の MacBook の Makefile とは異なる Makefile がサーバーにある限り問題ないのでしょうか?

なぜこれが起こっているのか、どうすれば修正できるのか、誰かが追放するのを手伝ってもらえますか?

初めてmakeを実行したときのmakefileは次のとおりです。

OBJECTS = Ammunition.o Armor.o Consumable.o 
HEADERS = Ammunition.h Armor.h Consumable.h 

all: Jhack

%.o: %.cpp $(HEADERS)
    g++ -c $< -o $@ -std=c++0x

Jhack: $(OBJECTS) main.o
    g++ -o Jhack $^

clean:
    rm -f *.o Jhack

run: Jhack
    ./Jhack

ありがとう。

4

3 に答える 3

1

おそらく、GCC の古い実験的なバージョンを使用しているでしょう。コメントからの「ConceptGCC」、および-std=c++0xフラグがそう教えてくれます。最新の GCC バリアントは-std=c++11代わりに使用します。

gcc の代わりに g++ を使用する必要はありません。これは単に便利なので、C++ のコンパイルに必要なすべての gcc オプションを渡す必要はありません。特に、-lstdc++g++ によって暗示されます。

かなり珍しい「ConceptGCC」パッケージを使用しているため、通常の GCC バージョン 4.8.0 に置き換えることをお勧めします。

make が行おうとしていることをデバッグするには、 を実行しますmake -n。その後、これらのコマンドを手動で実行して、何が起こるかを正確に確認できます。

于 2013-04-29T08:06:14.810 に答える
0

ジャスティン、何が原因なのかわかりませんstd=c++0x(調べましたが、どの「実験的機能」が影響を受けている可能性があるのか​​ わかりません...)が、それを削除しても問題が解決しない場合は、削除してください.

あなたが説明したことは、一部のオブジェクトにはstd=c++0xフラグが必要であり、一部のオブジェクトはそれで構築されないように聞こえます。フラグを削除して、クリーニングしてから再構築してみませんか?

最悪の場合 - 変数ルールを削除し、オブジェクト ファイルごとに 3 つの異なるルールを記述します。

于 2013-04-29T06:59:29.480 に答える