私は Snow Leopard マシン (10.6.5) で作業しており、C++ アプリケーションのバグを探しています。ただし、リンカーがクラッシュするため、g++ -O0 -g でアプリをビルドできません。
g++-4.0 -arch i386 -arch x86_64 ... -dynamic -bundle -o SOMELIB.dylib <SOME OBJECTS>...
collect2: ld terminated with signal 11 [Segmentation fault]
collect2: ld terminated with signal 11 [Segmentation fault]
2 つのクラッシュは、「-arch」フラグが 2 つあるためだと思います。クラッシュが発生したと書かれたコアファイルを取得しました
(gdb) bt
#0 0x000000010001a2eb in Linker::synthesizeDebugNotes ()
#1 0x0000000100024cc5 in Linker::collectDebugInfo ()
#2 0x0000000100028198 in Linker::link ()
#3 0x000000010002a9eb in main ()
このヒントに従って、コンパイラ フラグから「-g」を削除すると、すべて正常にビルドされます。さらに、私たちのもののほとんどは '-g' で問題なくビルドされますが、2 つの大きなモジュール (.dylibs) だけがビルドされないため、それらのデバッグ情報が残っていません。そして、皮肉なことに、バグはこれらの dylib の 1 つに潜んでいます。
このバグは、初期化されていないメモリの使用が原因である可能性が最も高く、valgrind でアプリを実行すると、初期化されていないメモリ参照がいくつかあることがわかりますが、debuginfo がないため、モジュール XXX ( dylib "-g" でコンパイルできない)
そこで、Apple のオープン ソース Web サイトから ld ユーティリティをダウンロードしようとしましたが、Apple が提供しない Mac 固有のバージョンの libunwind への依存関係が欠落しているため、ビルドできないことがわかりました (あの男のように)。あちらへ。したがって、リンカーを再コンパイルできません。
次の質問は、今何をすべきかということです。Macサポートへの連絡を本当に避けたかった...
ld バージョンは「ld64 97.17」、XCode は 3.2.5、gcc は 4.0.1 です。
私は本当にいくつかの指示が必要です...