首页 » c++ » 正文

[YouComplteMe] fatal error: ‘filesystem’ file not found

大家好,我是刘傲天,很荣幸我又遇到了关于YouCompleteMe(一下简称Ycm)的问题。

这个问题出现是因为我PlugUpdate更新了插件,结果这个插件更新后不能启动,提示我YcmRestartServer,但是我不能启动,于是就想到重新去编译一下Ycm。

遇到的问题

在重新编译的时候就遇到了一个问题,很直观的就是标题这样

fatal error: ‘filesystem’ file not found

这是调用Ycm的

python3 install.py --all

导致的报错。

查找报错原因

查了很多网站之后发现这个filesystem头文件是在C++17引入的,所以你编译需要支持c++17,设置std=c++17,当然YCM作者也能想到这个问题,我的解决方法就是首先找系统里有没有filesystem这个文件,于是

sudo find /usr/ | grep filesystem$

可以看到匹配我g++版本的这个文件,experimental/filesystem是c++17之前的使用方式(貌似,不太确定),c++17之后就直接使用filesystem,所以我们只需要添加这个路径让g++或clang++可以找到这个文件就可以了,于是

测试

创建一个c++文件,包含filesystem,之后我们试着去编译他

我的文件路径是/tmp/1.cc

添加刚才我们找到的路径

g++ /tmp/1.cc -o /tmp/1 -nostdinc++ -I/usr//local/Cellar/llvm/10.0.0_3/include/c++/v1/

OK,没有报错的话说明这个方法可行。

解决方案

编译的变量都是在cmake里边控制的,所以我们只需要修改cmake的内容,让他添加这个路径和-nostdinc++设置就可以解决这个问题,报错最上方可以看到ycm/CmakeLists.txt有一个warning,所以我们找这个文件

cd ~/.vim/plugged/YouCompleteMe
find ./ | grep ycm/CmakeLists.txt

它会给你返回这个文件的路径

.//third_party/ycmd/cpp/ycm/CMakeLists.txt

vim .//third_party/ycmd/cpp/ycm/CMakeLists.txt

在文件最下边添加一行

set( CMAKE_CXX_FLAGS “-I/usr/local/Cellar/llvm/10.0.0_3/include/c++/v1 -nostdinc++ ${CMAKE_CXX_FLAGS}”)

就可以解决问题。

你可以试着重新去编译一下

如果你遇到Youcompleteme不能成功补全头文件点击即可。

发表评论