gdbのコンパイルに関する注意事項:必ずきれいなbuildフォルダを使用してください.

2219 ワード

先週gdbの通知メールを受け取り、gdb 7.8はreleaseになったと言った.gdbの忠実なユーザーとして、自然と体験してみました.急いで次のバージョンをダウンロードしてbuildをしたら、最後のlink段階でエラーが発生しました.
gcc: unrecognized option `-rdynamic'
ld: warning: file/usr/local/lib/libiconv.so: attempted multiple inclusion of file
Undefined                       first referenced
 symbol                             in file
observer_attach_exited              cli-interp.o
observer_notify_signal_exited       infrun.o
observer_attach_sync_execution_done cli-interp.o
observer_attach_command_error       cli-interp.o
observer_notify_signal_received     infrun.o
observer_attach_end_stepping_range  cli-interp.o
observer_attach_no_history          cli-interp.o
ptid_match                          remote.o
observer_notify_end_stepping_range  infrun.o
observer_notify_exited              infrun.o
observer_notify_no_history          infrun.o
observer_attach_signal_exited       cli-interp.o
observer_notify_command_error       event-loop.o
observer_notify_sync_execution_done infrun.o
observer_attach_signal_received     cli-interp.o
ld: fatal: symbol referencing errors. No output written to gdb
collect2: ld returned 1 exit status
Makefile:1334: recipe for target 'gdb' failed
make[2]: *** [gdb] Error 1
make[2]: Leaving directory '/export/home/nan/build_gdb/gdb'
Makefile:8667: recipe for target 'all-gdb' failed
make[1]: *** [all-gdb] Error 2
make[1]: Leaving directory '/export/home/nan/build_gdb'
Makefile:831: recipe for target 'all' failed
make: *** [all] Error 2
gdbのコンパイルプロセスはずっと最も簡単で、linkエラーは私が初めて出会った.私はまずgdbのIRCで議論して、それからまた自分でdebugして、コードファイルとスクリプトをチェックして、結果は最後に得た結論は:私のために使ったbuildディレクトリの前に7.7.1バージョンをコンパイルしたので、私はサボって、空を空けていないので、今7.8バージョンをコンパイルする時に問題があって、原因はlinkのですか7.7.1の目標ファイルですか.
最後に得た経験は、gdb(または他のソフトウェア)をコンパイルするときは、必ずきれいなbuildフォルダを用意しなければなりません.そうしないと、link段階で問題が発生したように、意外な問題が発生する可能性があります.
注意:buildフォルダはソースコードをきれいに保つために、通常はソースフォルダの外にbuildフォルダを新規作成し、すべてのconfigure、make操作などをこのbuildフォルダの下で行います.例:
mkdir build_gdb;
cd build_gdb;
../gdb-7.8/configure
make
make install