かなり大きな C++ プロジェクトを Mac OS X で g++ 4.0 を使用するように移植しようとしています。プロジェクトはエラーなしでコンパイルされますが、GDB を正しく動作させることができません。GDB コマンド ラインで「bt」と入力してスタックを表示すると、表示されるすべてのファイル名と行番号が間違っています。
たとえば、GDB スタック トレースによると、私のmain()
関数は Mac OS X SDK の stdexcept にあるはずですが、これは意味がありません。
GDB がひどく誤動作する原因は何ですか? コード内の #line ステートメントと #file ステートメントを既にチェックし、コードに unix 行末しかないことを確認しました。また、プロジェクトをクリーンアップして再構築しました。Hello World プロジェクトのデバッグも試みましたが、同じ問題はありませんでした。
問題は、私がリンクしているサードパーティのライブラリの 1 つと、それらのコンパイル方法に関係している可能性がありますか? それとも全く違うものですか?
Xcodeによって実行されるgcc
との 2 つの呼び出しの例を次に示します。知る限り、私のプロジェクトのすべての cpp ファイルはコンパイルされ、同じパラメーターでリンクされています。ld
/Developer/usr/bin/gcc-4.0 -x c++ -arch i386 -fmessage-length=0 -pipe -Wno-trigraphs -fpascal-strings -fasm-blocks -O0 -fpermissive -Wreturn-type -Wunused-variable -DNO_BASS_SOUND -D_DEBUG -DXCODE -D__WXMAC__ -isysroot /Developer/SDKs/MacOSX10.5.sdk -mfix-and-continue -fvisibility-inlines-hidden -mmacosx-version-min=10.4 -gdwarf-2 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXDEBUG__ -D__WXMAC__ -c "/Users/adriangrigore/Documents/Gemsweeper Mac/TSDLGameBase.cpp" -o "/Users/adriangrigore/Documents/Gemsweeper Mac/build/Gemsweeper Mac.build/Debug/Gemsweeper Mac.build/Objects-normal/ i386/TSDLGameBase.o」
/Developer/usr/bin/g++-4.0 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk "-L/Users/adriangrigore/Documents/Gemsweeper Mac/build/Debug" -L/Developer/SDKs/MacOSX10 .5.sdk/usr/local/lib -L/opt/local/lib "-F/Users/adriangrigore/Documents/Gemsweeper Mac/build/Debug" -F/Users/adriangrigore/Library/Frameworks -F/Developer/ SDKs/MacOSX10.5.sdk/Library/Frameworks -filelist "/Users/adriangrigore/Documents/Gemsweeper Mac/build/Gemsweeper Mac.build/Debug/Gemsweeper Mac.build/Objects-normal/i386/Gemsweeper Mac.LinkFileList" - mmacosx-version-min=10.4 /opt/local/lib/libboost_program_options-mt.a /opt/local/lib/libboost_filesystem-mt.a /opt/local/lib/libboost_serialization-mt.a /opt/local/lib/ libboost_system-mt.a /opt/local/lib/libboost_thread-mt.a "/Users/adriangrigore/Documents/Gemsweeper Mac/サードパーティ/FreeImage/Dist/libfreeimage.a" "/Users/adriangrigore/Documents/Gemsweeper Mac/サードパーティ/cpuinfo-1.0/libcpuinfo.a" -L/usr/local/ lib -framework IOKit -framework Carbon -framework Cocoa -framework System -framework QuickTime -framework OpenGL -framework AGL -lwx_macd_richtext-2.8 -lwx_macd_aui-2.8 -lwx_macd_xrc-2.8 -lwx_macd_qa-2.8 -lwx_macd_corehtml-2.8 -lwx_macd_adv-2.8 -lwx_macd_ -lwx_base_carbond_xml-2.8 -lwx_base_carbond_net-2.8 -lwx_base_carbond-2.8 -framework SDL -framework Cocoa -o "/Users/adriangrigore/Documents/Gemsweeper Mac/build/Debug/Gemsweeper Mac.app/Contents/MacOS/Gemsweeper Mac"-L/usr/local/lib -framework IOKit -framework Carbon -framework Cocoa -framework System -framework QuickTime -framework OpenGL -framework AGL -lwx_macd_richtext-2.8 -lwx_macd_aui-2.8 -lwx_macd_xrc-2.8 -lwx_macd_qa-2.8 -lwx_macd_html-2.8 - lwx_macd_adv-2.8 -lwx_macd_core-2.8 -lwx_base_carbond_xml-2.8 -lwx_base_carbond_net-2.8 -lwx_base_carbond-2.8 -framework SDL -framework Cocoa -o "/Users/adriangrigore/Documents/Gemsweeper Mac/build/Debug/Gemsweeper Mac.app/Contents/MacOS /ジェムスイーパー・マック」-L/usr/local/lib -framework IOKit -framework Carbon -framework Cocoa -framework System -framework QuickTime -framework OpenGL -framework AGL -lwx_macd_richtext-2.8 -lwx_macd_aui-2.8 -lwx_macd_xrc-2.8 -lwx_macd_qa-2.8 -lwx_macd_html-2.8 - lwx_macd_adv-2.8 -lwx_macd_core-2.8 -lwx_base_carbond_xml-2.8 -lwx_base_carbond_net-2.8 -lwx_base_carbond-2.8 -framework SDL -framework Cocoa -o "/Users/adriangrigore/Documents/Gemsweeper Mac/build/Debug/Gemsweeper Mac.app/Contents/MacOS /ジェムスイーパー・マック」8 -framework SDL -framework Cocoa -o "/Users/adriangrigore/Documents/Gemsweeper Mac/build/Debug/Gemsweeper Mac.app/Contents/MacOS/Gemsweeper Mac"8 -framework SDL -framework Cocoa -o "/Users/adriangrigore/Documents/Gemsweeper Mac/build/Debug/Gemsweeper Mac.app/Contents/MacOS/Gemsweeper Mac"
Xcode デバッガーに関する同様の質問を既にここで行っていることに注意してください。ただし、これは実際には Xcode のせいではなく、GCC / ld / GDB の問題であることを知ったので、再投稿します。
編集:私のプロジェクトでは、次のサードパーティ ライブラリを使用しています: SDL、Boost、wxWidgets。これがこの問題にとって重要かどうかはわかりませんが、念のために言及したかっただけです。
Xcode SDL プロジェクト テンプレートをコンパイルしようとしましたが、同じ問題は発生しなかったため、私のプロジェクトの何か特別なことが原因であるに違いありません。
2 番目の編集: ちょうど分かったように、「これは自動的に生成されたものです」という文字列を含むファイルを検索する際に間違いを犯しました。私が使用しているサードパーティのライブラリの 1 つであるFreeImageにすべて属している、同じ文字列を持つ数十のファイルを見つけました。そのため、問題は FreeImage に関連しているようですが、どうすればよいかまだわかりません。