YCM号称史上最难装vim插件,根据我的安装经验,此言不虚。得知其强大之时,我便不假思索开始安装。
我所用的系统为CentOS6.8,几年前装的,比较老,没想到这个的老系统差点要了我的老命。在网上找到了几篇安装经验文章:
https://www.jianshu.com/p/d908ce81017a?nomobile=yes
https://www.linnuxidc.com/Linux/2017-10/147825.htm
以及YCM官网:https://github.com/Valloric/YouCompleteMe
坑一:vim版本。系统自带vim为7.3版本,YCM需要7.4.1578以上,好吧,升级到8.0.
坑二:libpython2.7.so. 根据网上的一篇文章指示,编译安装YCM时,使用./configure --prefix=/usr/local --path 时需要指定Python解释器路径,也就是python2或python3只能支持一个。我的系统中既有2也有3,我选择指向python2.7的路径。没想到执行configure时报错:
“找不到动态链接库,只找到表态库?”
手动查找了一下:
[root@localhost]# which python
/usr/bin/python
[root@localhost]# which python2.7
/usr/local/bin/python2.7
[root@localhost]# locate libpython2.6.so
/usr/lib64/libpython2.6.so
/usr/lib64/libpython2.6.so.1.0
/usr/lib64/python2.6/config/libpython2.6.so
[root@localhost]# locate libpython2.7.so
[root@localhost]#
可以看到系统中只有libpython2.6的动态链接库,而没有libpython2.7。这是为什么呢?原来我在编译安装python2.7配置时没有加上--enable-shared参数,只有加上此参数才会生成动态链接库,否则只会生成静态链接库。
stackoverflow上有个贴子可以参考:
https://stackoverflow.com/questions/26597527/how-to-install-libpython2-7-so
坑三:C-family support. 如果要安装c语言家族支持,在运行install.py时需要加参数--clang-completer, 但是安装c支持又需要一大堆依赖包,so...谨慎选择哦。在这里出过的错我记不清了,总之最后我选择了不装!毕竟我很少使用C语言。
坑四:YCM server not start. 好不容易跟着YCM官网的步骤进行了安装,却被告知:YCM server not start, use YCMServerRestart to restart. 还要在/tmp下找到出错文件,里面记录了具体错误信息。
坑五:glibc-2.14. 查看YCM的错误记录后发现:glibc-2.14 required by YCM Server. 好吧,再看看glibc的版本。
[root@localhost root]# strings /lib64/libc.so.6 |grep GLIBC
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE
glibc是gnu发布的libc库,glibc是linux系统底层的api, 几乎其他任何运行库都需要依赖它。不同的软件可能对于glibc的版本要求不一样。此处,我的linux中glibc最高为2.12版本,而YCM说它需要2.14版本。
升级glibc-2.14的过程也是相当曲折。配置参数时报错:gcc or cmake 版本不符合要求,请参看INSTALL文件中的内容。查看之后发现我的gcc版本和cmake版本都比需要的要高出很多啊(具体是多少不记得了),怎么还总是提示?找了很多文章也没有解决,最后还是在stackoverflow上的一篇文章给了我启发,既然我的版本比你高你识别不出来,干脆就把配置脚本改一下,不再报错不就行了。于是我修改了configure文件,把对gcc和cmake的版本错误的屏蔽掉,结果可以正常configure了。我估计啊,glibc-2.14是比较早的版本,所以configure代码里没有考虑到更高版本的gcc和cmake的处理。
参见:http://cnodejs.org/topic/56dc21f1502596633dc2c3dc
坑六:make死循环. make一直在检查环境,怎么也停不下来,网上查看才知道是系统的时区不对,我用的英国东部时间,比配置glibc的时间稍晚了一些。解决办法就是改为亚洲上海时区。参看我的一篇博文:http://blog.51cto.com/ponyjia/2094129
坑七:glibc-2.15. 总算安装了glibc-2.14库,string命令也能显示,其他系统命令也都能用,只是有些小问题,比如说我以前能显示中文的终端现在显示乱码,先不管它了,打开vim看看吧,咦?还是YCM server not start? 再去看/tmp下的日志文件,我顿时无语。。。人家说“glibc-2.15 is required by YCM”。 能骂人吗, 你怎么不早说?难道还要安装glibc-2.15?
坑八:glibc-2.20. 看在you complete me的份上,乖乖就范吧。不过等等,万一我给了你2.15,你又想要2.16怎么办?给了你2.16,你又想要2.17呢?这么个要法,不得把老夫累死?不如一次给个够?于是我下载并安装了glibc-2.20, 与glibc-2.14的方法一样。
可是安装并替换了libc.so.6之后,几乎所有命令都不能用了, ls, mv, cp, vim等最简单的命令都不行,网上找了下,才知道centos对glibc的依赖是方方面面的,不同版本的差异可能轻则造成功能紊乱,重则瘫痪变植物人。肿么办?
好在还在系统里面,原来的glibc版本都还在,把libc.so.6的软链接重新指向glibc-2.12, 又恢复正常了。使用如下命令:
rm -rf /lib64.so.6
LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6
坑九:glibc-2.15. 到这时,我已被折磨得精疲力尽了,已经有放弃的声音出现在耳边,但是最后一口气还是不甘心,要不装一下2.15试试?说不定行呢?结果是装了2.15后,只要创建libc.so.6的软链接,系统就会重启,更别说YCM Server了。呃,好吧,我承认我就是贱。
坑十:rpm. 没有最贱,只有更贱。我曾经挣扎过要不要放弃,因为就这破玩意已经花了我一整天的时间,没有进展。理智告诉我技术就是这样,每一个细节都可能出问题,不必太受伤。也不必太纠结是不是最终能成功,因为这世界不能成功的事情太多了。但是休息了一晚上之后,手痒的我又忍不住打开了搜索框。居然可以用rpm安装glibc?rpm应该比较靠谱吧?毕竟把所需要的配置都集成进去了。可是。。可是。。。当我从不知什么网站上(国外的,忘了)下载并安装了glibc-2.15版rpm之后,粗大四了!我的系统命令彻底不能用了,并且可恶的rpm居然删除了我系统中的glibc-2.12.so库文件, 这下我想做so.6软链接都不能了。而且使用glibc-2.14.so去恢复也不行,重启系统也进不去了!又研究了半天,没有头绪,因为我不知道这个该死的rpm都做了什么操作,也就无从下手去修复。
安装个插件不成,还把我的系统也搞崩了。什么YouCompleteMe, 我看是 You Destory Me 吧。不过也好,验证了这条路走不通,这下可以彻底死心了。其实用Pycharm也挺好的,也有vim插件,虽然不如真正的vim功能多。工具就是工具,哪个好用就用哪个,在这上面浪费这么多时间,不值。
终于该歇歇了!
最后,还有最后,我装上了YouCompleteMe, 不过不是在CentOS6.8上---我早就想换掉这个系统了,而是在Fedora27上。安装还算比较顺利,原来那么多麻烦其实主要是系统环境的问题。总是有解决办法的,不是吗?具体安装过程见我另一篇博文:
http://blog.51cto.com/ponyjia/2094105
原文地址:http://blog.51cto.com/ponyjia/2094361