node编译c++模块
2019年05月07日

概述

最近在nodejs里写代码的时候,用到了sqlite模块,由于sqlite使用了c++实现,所以需要使用node-gyp进行模块编译.但是在编译过程中总是报错.刚开始没太在意,以为是缺少node-gyp模块,后来看了下错误输出,其中提示如下:

virtual memory exhausted: Cannot allocate memory

网上搜索了下,说是缺少交换区,于是free -m查看了下,输出如下:

              total        used        free      shared  buff/cache   available
Mem:            996         545         178          74         272         240
Swap:             0           0           0

问题就在于物理内存耗尽后,无法完成编译!

解决办法

  1. 创建交换区文件
# 创建1G的交换区
dd if=/dev/zero of=/myswap bs=4M count=256
  1. 启用交换区
swapon /myswap
  1. 查看是否正确
free -m

输出如下:

              total        used        free      shared  buff/cache   available
Mem:            996         545         178          74         272         240
Swap:          1023          58         965
  1. 重新编译
npm rebuild