一、cmake编译
1. 是否使用root权限
解决:使用sudo make编译
2. 是否开启并行编译
问题一:编译过慢
解决:开启并行编译,首先检查cpu的内核个数,终端输入
nproc
然后根据需要,选择不高于你的cpu内核数进行并行编译,比如我的cpu是8核的,那么在编译时输入
sudo make -j8
问题二:编译卡住、卡死
解决:如果开启了并行编译,则降低使用的内核数,或者不使用并行编译
sudo make -j4 # 只使用4个内核
sudo make # 不使用并行编译
如果不使用并行编译依然卡住卡死,这一般是由于设备内存有限,我们可以增加内存交换空间,首先停用我们已有的交换空间:
sudo swapoff /swapfile
然后我们分配一个大一点的交换空间,比如这里我分配1M*4096 = 4GB的空间:
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
最后再启用这个交换空间,之后再进行编译。
sudo mkswap /swapfile
sudo swapon /swapfile
(optional)永久增加此交换空间
sudo vim /etc/fstab
然后将/swapfile swap swap defaults 0 0加到在fstab文件中让系统引导时自动启动
二、colcon编译
问题一:编译过慢
解决:开启并行编译,首先检查cpu的内核个数(同上面cmake),然后根据需要,选择不高于你的cpu内核数进行并行编译,比如我的cpu是8核的,那么在编译时输入
colcon build --parallel-workers 8
问题二:编译卡住、卡死
解决:如果开启了并行编译,则降低使用的内核数,或者不使用并行编译
colcon build --parallel-workers 4 # 只使用4个内核
colcon build --executor sequential # 不使用并行而是顺序编译
如果不使用并行编译依然卡住卡死,这一般是由于设备内存有限,我们可以增加内存交换空间,操作流程同上述cmake,之后再进行colcon编译。
关于交换空间,具体可参考:http://t.csdnimg.cn/TV1zC