Linker (ld) падает в Mac OS X при компиляции с помощью debuginfo, но работает нормально без - PullRequest
1 голос
/ 22 декабря 2010

Я работаю на машине снежного барса (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.

Мне действительно нужны указания ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...