在wsl使用vcpkg install pcl安装时,出现了BUILD_FAILED失败提示,查看log文件出现如下的错误:
compilation problem, c++: internal compiler error: Killed (program cc1plus)
像是内存不足,所以调整了wsl的内存和swap,首先修改用户目录下的 .wslconfig文件,然后wsl --shutdown后重启wsl
[wsl2] memory=10GB swap=10GB
还是同样的错误。通过top查看发现内存和swap都被使用到接近最大值,这就有点异乎寻常了。
最后通过谷歌发现一个类似的问题 https://groups.google.com/g/hoomd-users/c/3FnnVfO3FqA
其中有个解答给了很大的提示
Try make without the -j12. Virtual machines usually don't have enough resources to run parallel builds.
有可能vcpkg的编译参数启用了多核心,但wsl核数太少导致在编译过程中内存占用异常。继续修改.wslconfig文件,增加核数配置
[wsl2] memory=10GB swap=10GB processors=8
然后再次shutdown后重启wsl,执行vcpkg install pcl,然后通过htop命令查看,发现8核心CPU跑满,内存占用率仍然较高,但swap基本正常,一直到最后编译成功。
那么wsl默认核心数究竟是多少呢?
尝试将用户目录中的.wslconfig文件改名,然后将wsl进行shutdown后重启,再次进行htop,发现wsl显示有20个核心(宿主机是14核心,20个逻辑处理器)
所以实际原因不是wsl核数太少,而是核数太多,有可能导致同时并行编译的进程数太多,超过了内存和swap的负荷。
通过修改.wslconfig文件,减少了wsl的核心数,也就抑制了vcpkg进行并行编译的进程数,进而降低了编译时的内存负担。
标签:WSL,wsl,编译,vcpkg,swap,pcl,内存 From: https://www.cnblogs.com/csliwei/p/17063341.html