13

gdbで使用するデバッグシンボルを使用してプログラムをコンパイルしようとしています。makefileに-gフラグを追加しましたが、gdbにプログラムをロードすると、「...からシンボルを読み取っています(デバッグシンボルが見つかりません)」というメッセージが表示されます。なにが問題ですか??

これは、関連するビットが含まれているはずの私のmakefileの簡略化された例です。

CPP = g++
CFLAGS = -c -g -Wall

$(BIN): $(OBJ)
 $(CPP) $(LDFLAGS) $(OBJ) -o $(BIN) $(LIBS)

<test.o>: <test.cpp>
 $(CPP) $(CFLAGS) <test.cpp> -o <test.o>

全体を見たい場合は、代わりにここに行くことができますが、必要ではないと思います。

http://pastebin.com/vGNjy0ga

その他の注意事項..WindowsでMinGWをコンパイルしていて、依存関係としてSFMLとOpenGLがあります。

いいえ、-sフラグは私のmakefileのどこにもありません。

4

6 に答える 6

6

ああ。私は非常に申し訳ない。makefileの「clean:」部分が壊れていることがわかりました。したがって、私がmake cleanを使用したとき、何も起こりませんでした。.oファイルを手動で削除すると、問題が修正されました。フラグは完全に機能するようになりました。とにかく投稿してくれたみんなに感謝します!これは今すぐ削除できます。

于 2010-12-31T06:36:39.427 に答える
5

古い F77 コードで継承したメイクファイルを使用すると、同じ問題が発生しました。私は人々が推奨するすべてのフラグを試しました (-g -ggdb ...etc.) 解決策は実行されましたmake clean それがない場合、またはその意味がわからない場合は、基本的にすべてのコンパイル済み (.o) ファイルを削除してください。

フラグだけが変更されたので、メイクファイルは再コンパイルすることを知りませんでした。これが誰かを助けることを願っています!

于 2014-07-23T15:14:37.433 に答える
1

Mingwの経験はあまりありませんが、-gを-ggdbに置き換えてみてください。これで問題が解決する場合があります。gccのmanページによると

GDBで使用するためのデバッグ情報を生成します。これは、可能な限りGDB拡張機能を含め、利用可能な最も表現力のある形式(DWARF 2、スタブ、またはどちらもサポートされていない場合はネイティブ形式)を使用することを意味します。

于 2010-12-31T06:31:27.373 に答える
1

交換してみる

$(BIN): $(OBJ)
 $(CPP) $(LDFLAGS) $(OBJ) -o $(BIN) $(LIBS)

$(BIN): $(OBJ)
 $(CPP) $(CFLAGS) -o $(BIN) $(OBJ) $(LDFLAGS) $(LIBS)

(編集)注:-cオプションは実行可能ファイルでは機能しません

于 2010-12-31T06:21:28.877 に答える
1

-gオブジェクトをバイナリコードにリンクするときに必要だと思います。

CPP = g++
CFLAGS = -g -Wall

$(BIN): $(OBJ)
 $(CPP) $(CFLAGS) $(OBJ) -o $(BIN) $(LDFLAGS) $(LIBS)

<test.o>: <test.cpp>
 $(CPP) $(CFLAGS) -c <test.cpp> -o <test.o>
于 2010-12-31T06:39:52.890 に答える
0

よくわかりませんが、リンクしているときでも-gが必要だと思います。

于 2010-12-31T06:14:57.023 に答える