Это оказалось ошибкой gmake 3.81. Когда я запускал команду компиляции напрямую без make, она могла использовать гораздо больше памяти. Кажется, в 3.80 была известная ошибка:Что-то вроде этого . Этот баг должен был быть исправлен в 3.81. но я получил очень похожую ошибку.
Итак, я попробовал gmake 3.82. Компиляция продолжилась, и я больше не видел ошибки виртуальной машины.
Мне так и не удалось заставить его сделать дамп ядра, поэтому я на самом деле не знаю, на что не хватило виртуальной памяти, на gmake, g++ или as. Это просто не сбрасывало бы ядро при этой ошибке. Я также не знаю, в чем на самом деле была ошибка, но, похоже, теперь она работает.
Я бы не стал писать это на bash или любом диалекте sh (по причинам, уже упомянутым в комментариях ), но похоже, что вы пытаетесь извлечь числовые значения из вывода одной функции и передать их два одновременно ко второй функции?
Если это так, вы могли бы сделать что-то вроде этого:
re='([0-9-]+\.[0-9-]+).*Peak usage: ([0-9-]+) megabytes\.'
while read -r a b ; do
FUNCTION_B "$a" "$b"
done < <(FUNCTION_A | sed -nE "s/$re/\1 \2/p")
Я не совсем уверен, что доверяю этому, хотя -слишком легко для того, что находится в $re
, сломать скрипт sed. Было бы лучше передать $re в awk с помощью опции awk -v
или либо в awk, либо в perl в качестве экспортируемой переменной среды.
напр.
export re='([0-9-]+\.[0-9-]+).*Peak usage: ([0-9-]+) megabytes\.'
while read -r a b ; do
FUNCTION_B "$a" "$b"
done < <(FUNCTION_A | perl -n -e 'print "$1 $2\n" if m/$ENV{re}/')
Тем не менее, я настоятельно рекомендую вам потратить некоторое время на изучение awk
и/или perl
. sed
и grep
.