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>
全体を見たい場合は、代わりにここに行くことができますが、私はとは思いません必要です:
その他の注意事項..WindowsでMinGWを使用してコンパイルしており、依存関係としてSFMLとOpenGLがあります。
いいえ、-sフラグは私のmakefileのどこにもありません。
ああ。私は非常に申し訳ない。 makefileの「clean:」部分が壊れていることがわかりました。したがって、make cleanを使用したとき、何も起こりませんでした。 .oファイルを手動で削除すると、問題が修正されました。フラグは完全に機能するようになりました。とにかく投稿してくれたみんなに感謝します!これは今すぐ削除できます。
古いF77コードで継承したメイクファイルを使用したときにも同じ問題が発生しました。私は人々が推奨するすべてのフラグを試しました(-g -ggdb ...など)ソリューションが実行されましたクリーンにするそれがないか、それが何を意味するのかわからない場合は、基本的にすべてのコンパイル済みを削除します( .o)ファイル。
フラグのみが変更されたため、makefileは再コンパイルすることを知りませんでした。そのため、実際には、-gまたは-ggdbを使用してコンパイルしていませんでした。これが誰かを助けることを願っています!
オブジェクトをバイナリコードにリンクするときは、-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>
交換してみてください
$(BIN): $(OBJ)
$(CPP) $(LDFLAGS) $(OBJ) -o $(BIN) $(LIBS)
と
$(BIN): $(OBJ)
$(CPP) $(CFLAGS) -o $(BIN) $(OBJ) $(LDFLAGS) $(LIBS)
(編集)注:-cオプションは実行可能ファイルでは機能しません
よくわかりませんが、リンク中でも-gが必要だと思います。
Mingwの経験はあまりありませんが、-gを-ggdbに置き換えてみてください。これで問題が解決する場合があります。 gccのmanページによると
GDBで使用するためのデバッグ情報を生成します。これは、可能な限りGDB拡張機能を含め、利用可能な最も表現力豊かな形式(DWARF 2、スタブ、またはどちらもサポートされていない場合はネイティブ形式)を使用することを意味します。