Open lgweix opened 8 years ago
请问楼主如果编译正常,但是出现如下的错误,怎么弄? Traceback (most recent call last): File "C:\Python27\lib\logging__init.py", line 859, in emit msg = self.format(record) File "C:\Python27\lib\logging__init.py", line 732, in format return fmt.format(record) File "C:\Python27\lib\logging\init__.py", line 474, in format s = self._fmt % record.dict__ UnicodeDecodeError: 'ascii' codec can't decode byte 0xb2 in position 20: ordinal not in range(128) Logged from file server_utils.py, line 107
YouCompleteMe 可谓编程语言补全神器, 支持c, c++, objectc, c#,go,javascript等等, 内置多个补全引擎, 插件自动根据情况先择最优的引擎,或者同时使用多个补全引擎. 针对C语系, 使用clang来实现精确的语义分析.
安装过程参考官方的说明:https://github.com/Valloric/YouCompleteMe#windows 简要记录下windows上ycm的安装. ycm的安装比较麻烦, 需要依赖msvc, clang, python, cmake,7-zip等, 使用的vim版本要支持python, 好在官方安装指引非常详细, 按步骤安装即可. 也可以不不使用msvc, 而使用mingw, 不过需要做一些修改, 比较麻烦 具体在官方github页面的wiki上面有介绍.
这里主要点记录一下遇到的问题:
python版本问题
YCM插件需要vim支持python才行, 执行 vim --version 可以看到 -python 或者+python, -表示不支持, +表示支持. 可以从github上获取编译好的带pyhthon支持的windows版本vim https://github.com/vim/vim/releases
本地的python版本为2.7.11. 按步骤安装好YCM后,打开一个文件,或者输入:python print "hello", 会出现如下的错误提示:
似乎是找不到本地的python, google了一翻, 据说是python 2.7.11的bug, python 2.7.9则不存在这个问题, 换了python版本后, 问题还在, 提示如下:
输入:YcmToggleLogs, 看到完整的栈信息
重新安装编译了下ycm后问题消失.
c/c++编译标志配置文件
打开一个cpp文件,出现错误提示
这是由于没有设置编译标志造成的, YCM的安装说明文档里有说明, YCM提供了一个示例文件, youcompleteme\third_party\ycmd\cpp\ycm.ycm_extra_conf.py 将这个文件copy到自已的工程, 根据需要修改编译标志,即可.不过这样很麻烦, 可以通过vim选项来设置默认编译标志文件:
.ycm_extra_conf.py 文件中的-Wc++98-compat注释掉,否则使用c++11时会报错类似下面的错误:
参考:https://github.com/Valloric/YouCompleteMe/issues/700
YCM错误日志及调试信息.
在vim配置文件中加上下面的选项
几个常用命令:
:YcmToggleLogs
: 即可查看到错误日志 及调试信息 使用:YcmDebugInfo
: 可以查看ycm相关的信息,包括编译标志,版本等等:YcmDiags
: 查看当前文件中的错误信息vs2015兼容性问题
vs2015与之前的版本有一些区别, 比如char16_t,char32_t作为编译器的内置类型,而clang3.8不认识
boost相关
ycm自带的boost缺少部分文件,如asio. 自行下载boost, .ycm_extra_conf.py要作一些修改:
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A
否则一些头文件找不到,如winsock2.h''-DBOOST_USE_WINDOWS_H'
, 否则会有一些冲突virtualbox中ubuntu16.04编译ycm出错
用free命令可以看到内存及swap都被耗尽 参考:http://vb2005xu.iteye.com/blog/2171295 主要原因大体上是因为内存不足,有点坑. 增大虚拟机内存编译成功了