我正在尝试在raspberry pi上编译项目(tdbot),但是当编译达到50%时,可用RAM耗尽,并且操作系统( Raspbian GNU / Linux 9(stretch))在pi v3,1GB RAM)终止编译器线程,从而导致错误:
[ 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%,等等。
我通过在CONF_SWAPSIZE=8192
中设置/etc/dphys-swapfile
(在50%编译时的内存使用情况)中配置了一个8GB的交换文件。
free -h
total used free shared buff/cache available
Mem: 875M 825M 30M 0B 20M 16M
Swap: 8.0G 828M 7.2G
但是即使使用8GB的交换内存,编译器进程仍然可以杀死50%。
我已经搜索了好几个小时,试图找到任何make或cmake的编译标志,这些标志会减少RAM的需求,但找不到任何东西。
我也使用make -j 1
来仅使用一个内核,但这两个都没有帮助。
还有其他方法可以使编译成功吗?