写点什么

WSL 中使用 vcpkg 安装 pcl 库出现编译失败的原因

作者:大伟
  • 2023-01-20
    北京
  • 本文字数:676 字

    阅读完需:约 2 分钟

WSL中使用vcpkg安装pcl库出现编译失败的原因

  在 wsl 使用 vcpkg install pcl 安装时,出现了 BUILD_FAILED 失败提示,查看 log 文件出现如下的错误:

compilation problem, c++: internal compiler error: Killed (program cc1plus)
复制代码

 

  像是内存不足,所以调整了 wsl 的内存和 swap,首先修改用户目录下的 .wslconfig 文件,然后 wsl --shutdown 后重启 wsl

[wsl2]memory=10GBswap=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=10GBswap=10GBprocessors=8
复制代码

  然后再次 shutdown 后重启 wsl,执行 vcpkg install pcl,然后通过 htop 命令查看,发现 8 核心 CPU 跑满,内存占用率仍然较高,但 swap 基本正常,一直到最后编译成功。

 

  那么 wsl 默认核心数究竟是多少呢?

  尝试将用户目录中的.wslconfig 文件改名,然后将 wsl 进行 shutdown 后重启,再次进行 htop,发现 wsl 显示有 20 个核心,8G 内存,2G 交换空间(宿主机是 14 核心,20 个逻辑处理器,16G 内存)

  所以实际原因不是 wsl 核数太少,而是核数太多,有可能导致同时并行编译的进程数太多,超过了内存和 swap 的负荷。

 

  通过修改.wslconfig 文件,减少了 wsl 的核心数,也就抑制了 vcpkg 进行并行编译的进程数,进而降低了编译时的内存负担。

 

发布于: 刚刚阅读数: 4
用户头像

大伟

关注

码龙战BUG于野。 2020-05-21 加入

还未添加个人简介

评论

发布
暂无评论
WSL中使用vcpkg安装pcl库出现编译失败的原因_大伟_InfoQ写作社区