Почему «сделать» не удается на льва? - PullRequest
12 голосов
/ 15 ноября 2011

Я использую make для создания большого проекта на OSX Lion.Сценарии отлично работали на OSX вплоть до Snow Leopard, но теперь это не удается.

В результате получается, что после сборки определенных модулей появляется ошибка, похожая на следующую:

touch my.app/Contents/Resources
touch my.app
make[2]: write error
make[1]: *** [all] Error 1
make: *** [all] Error 1

ЕслиЗатем я снова набираю make, и она возобновляется с того места, где происходит сбой, и успешно строится (пока не обнаружит еще одну такую ​​ошибку).Это всегда происходит для одних и тех же двух модулей проекта, и я не могу понять, почему.

Пожалуйста, дайте мне знать, если есть какая-то дополнительная информация, которую я могу предоставить, которая будет полезна.

1-е обновление

Вот вывод make -d:

...
     Finished prerequisites of target file `DesktopConn.o'.
     Prerequisite `DesktopConn.cxx' is older than target `DesktopConn.o'.
    No need to remake target `DesktopConn.o'.
    Considering target file `List.o'.
     Looking for an implicit rule for `List.o'.
     Trying pattern rule with stem `List'.
     Trying implicit prerequisite `/bin/sh: line 1:  6733 Segmentation fault: 11  make all
Reaping losing child 0x102d0ae70 PID 6471 
make[1]: *** [all] Error 1
Removing child 0x102d0ae70 PID 6471 from chain.
Reaping losing child 0x10560ee20 PID 6342 
make: *** [all] Error 1
Removing child 0x10560ee20 PID 6342 from chain.

Я поместил весь вывод make -d (очень подробный) на pastebin .

2-е обновление

Я также загрузил Makefile .

3-е обновление

Я скачалИсточник для make, собранный из исходного кода на моей машине.Это все еще терпит неудачу в той же самой точке.Я также пытался использовать make-файл из Snow Leopard.

Ответы [ 2 ]

1 голос
/ 17 января 2012

Попробуйте взять SEGV по номинальной стоимости.make либо разыменовывает указатель вне границ, либо пытается записать память где-то за пределами границ, либо пытается расширить стек за пределы размера стека процесса.Вы ничего не можете сделать с первыми двумя без отладки GNU make, но вы можете увеличить ограничение стека.Использование bash:

ulimit -s hard

поднимает мягкий предел до жесткого, давая вам как можно больше стекового пространства.Попробуйте и посмотрите, сможет ли make завершиться без сбоев.

0 голосов
/ 17 января 2012

llvm - это компилятор по умолчанию в Lion, я думаю, но он не был в предыдущих версиях, которые вы упоминали. Бритва Оккама говорит, попробуйте это с помощью:

CC=gcc make

Edit: Нашел это, с чем, я думаю, связано. См. Ответ №1, 3 редактирования: здесь . Это относится к созданию Ruby, но я думаю, что основная проблема та же. Возможно, вам потребуется загрузить другую версию GCC, если это проблема.

...