Как я могу остановить make от segfaulting?

#android #build #compilation #makefile

#Android #сборка #Сборник #makefile

Вопрос:

Я пытался создать cyanogenmod, хотя для целей этого вопроса я подозреваю, что это может быть просто любой крупный проект. Я пробовал три разные версии Ubuntu с тремя разными версиями make, и независимо от того, на какую версию я переключаюсь, в какой-то момент во время компиляции происходят сбои:

 make: *** [out/target/product/passion/symbols/system/lib/liblog.so] Segmentation fault
  

Это поведение make, или это может быть специфично для Android?

Комментарии:

1. Сегментации обычно являются результатом того, что программа пытается получить доступ к памяти, которой она не владеет. Ошибка, вероятно, ошибка в коде, который вы пытаетесь скомпилировать.

2. Этот код не выполняется, он компилируется. Он не обращается ни к какой памяти.

3. Segfault происходит во время выполнения, а не во время компиляции. Так что это может быть ошибка в вашем компиляторе. en.wikipedia.org/wiki/Segmentation_fault

4. Я это знаю, но я надеялся, что кто-нибудь может сказать мне, как заставить набор инструментов make / gcc / g избежать этой проблемы.

5. Если вы не внесли никаких изменений в исходные коды CM, я бы попросил их, вероятно, оценить сообщение об ошибке. Если вы внесли изменения, попробуйте создать чистые исходные коды CM и посмотрите, возникнет ли у вас такая же проблема.

Ответ №1:

make не является segfaulting. Проблема, вероятно, связана с используемой вами цепочкой инструментов для кросс-компиляции.

В сообщении, которое вы цитируете, говорится, что make запустил какую-то программу, чтобы создать «out / target / product / passion / symbols / system / lib / liblog.so», и эта программа, какой бы она ни была, была сегментирована.

Чтобы выяснить, что на самом деле происходит не так, вам нужно посмотреть на предыдущий результат процесса сборки. Если вы не используете опцию make с параметром «-j», вполне вероятно, что строка непосредственно над этим сообщением идентифицирует программу, которая нарушила сегментацию.

Ответ №2:

Я нашел решение: я создавал виртуальную машину Linux в общем directed, которая работала на Mac OS. После проверки моего кода на жестком диске виртуальной машины все заработало.