Я пытаюсь скомпилировать проект ( tdbot ) на raspberry pi, но когда компиляция достигает 50%, доступная оперативная память исчерпывается и ОС ( Raspbian GNU / Linux 9 (stretch) работает на pi v3, 1 ГБ ОЗУ) убивает поток компилятора, что приводит к ошибке:
[ 50%] Building CXX object td/CMakeFiles/tdcore.dir/td/telegram/AnimationsManager.cpp.o
make[3]: *** wait: No child processes. Stop.
make[3]: *** Waiting for unfinished jobs....
make[3]: *** wait: No child processes. Stop.
CMakeFiles/Makefile2:341: recipe for target 'td/CMakeFiles/tdcore.dir/all' failed
make[2]: *** [td/CMakeFiles/tdcore.dir/all] Error 2
CMakeFiles/Makefile2:86: recipe for target 'CMakeFiles/telegram-bot.dir/rule' failed
make[1]: *** [CMakeFiles/telegram-bot.dir/rule] Terminated
Makefile:162: recipe for target 'telegram-bot' failed
make: *** [telegram-bot] Terminated
./build.sh: line 1: 9784 Terminated make -j 1 telegram-bot
Один и тот же проект прекрасно работает на linux и macos. Точный процент и имя файла, где процесс компилятора убит, может варьироваться в зависимости от сборки, то есть может составлять 50% или 51% и т. Д.
Я настроил файл подкачки на 8 ГБ, установив CONF_SWAPSIZE=8192
в /etc/dphys-swapfile
(использование памяти при компиляции 50%).
free -h
total used free shared buff/cache available
Mem: 875M 825M 30M 0B 20M 16M
Swap: 8.0G 828M 7.2G
Но даже при использовании своп-памяти 8 ГБ процесс компилятора все равно прерывается на 50%.
Я часами гуглял, пытаясь найти какие-либо флаги компиляции для make или cmake, которые уменьшат требования к ОЗУ, но ничего не смогли найти.
Я также использовал make -j 1
, чтобы использовать только одно ядро, но это тоже не помогло.
Есть ли другой способ добиться успеха компиляции?