Я работаю на машине снежного барса (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]
Полагаю, что два сбоя происходят из-за того, что есть два флага "-arch".
Мне удалось получить файл ядра, в котором говорится, что сбой происходит в
(gdb) bt
#0 0x000000010001a2eb in Linker::synthesizeDebugNotes ()
#1 0x0000000100024cc5 in Linker::collectDebugInfo ()
#2 0x0000000100028198 in Linker::link ()
#3 0x000000010002a9eb in main ()
С этой подсказкой я удалил '-g' из флагов компилятора, и все работает нормально. Более того, большинство наших вещей прекрасно работает с '-g', а только два больших модуля (.dylibs) - нет, поэтому у меня нет debuginfo для них. И, как ни странно, ошибка скрывается только там, в одном из этих dlilibs.
Ошибка, скорее всего, связана с использованием неинициализированной памяти, так как она проявляется редко, а запуск приложения под valgrind показывает, что существует несколько обращений к неинициализированной памяти, но из-за отсутствия debuginfo просто говорит, что это происходит внутри модуля. XXX (dylib, который я не могу скомпилировать с "-g")
Итак, я попытался загрузить утилиту ld с сайта Apple с открытым исходным кодом, но обнаружил ( точно так же, как тот парень ), что он не будет собираться из-за отсутствия зависимости от версии для Mac. из libunwind, который Apple не будет отдавать. Таким образом, я не могу перекомпилировать компоновщик.
Итак, следующий вопрос - что мне теперь делать? Я действительно хотел избежать обращения в службу поддержки Mac ...
Версия ld: "ld64 97.17", XCode - 3.2.5, gcc - 4.0.1.
Мне действительно нужны указания ...