web-dev-qa-db-ja.com

-gフラグを使用してコンパイルしても、gdbにデバッグシンボルはありません

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のどこにもありません。

13
delaccount992

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

6
delaccount992

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

フラグのみが変更されたため、makefileは再コンパイルすることを知りませんでした。そのため、実際には、-gまたは-ggdbを使用してコンパイルしていませんでした。これが誰かを助けることを願っています!

5
Peter Mitrano

オブジェクトをバイナリコードにリンクするときは、-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>
1
ppan

交換してみてください

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

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

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

1
Alam

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

0
JP19

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

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

0
binW