youcompleteme入坑指南

author author     2022-10-30     623

关键词:

本文记录自己安装YouCompleteMe(简称YCM)这款VIM插件的过程,主要目的是记录出错情况和解决方法。

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时报错:
“找不到动态链接库,只找到表态库?”
手动查找了一下:
[[email protected]]# which python
/usr/bin/python
[[email protected]]# which python2.7
/usr/local/bin/python2.7
[[email protected]]# locate libpython2.6.so
/usr/lib64/libpython2.6.so
/usr/lib64/libpython2.6.so.1.0
/usr/lib64/python2.6/config/libpython2.6.so
[[email protected]]# locate libpython2.7.so
[[email protected]]#
可以看到系统中只有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的版本。
[[email protected] 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

网络安全入坑指南(授课版)

...周末,我做了一场两天两夜的技术公开课,包括网络安全入坑指南、(入门导论、行业解读、学习指南)网络安全攻击与防御、渗透测试入门、WiFi无线攻防等课题,目前部分授课视频已经上传到拼客学院网校,有兴趣的小伙伴... 查看详情

laravel入坑指南——数据迁移与填充

当我们开发完成一个(小)项目,发布到线上时,我们需要将本地数据库迁移到服务器上,并且填充初始化数据。而Laravel框架规定了一套完善的数据迁移与填充机制。在官网中分别介绍了以下四个命令:phpartisanmake:migration ph... 查看详情

nw.js入坑指南

NW.js是什么?NW.js是基于 Chromium 和 Node.js 运行的,以前也叫nodeWebkit。这就给了你使用HTML和JavaScript来制作桌面应用的可能。在应用里你可以直接调用Node.js的各种api以及现有的第三方包。因为Chromium和 Node.js ... 查看详情

jquery入坑指南

前言  Ajax官方文档  爱jQuery  jQuery插件库  jQuery中文apiinput赋值和取值记录一下:在写一个input赋值,二话不说就直接利用了$(‘#xx‘).val()来进行取值和赋值,取值ok,赋值后利用alert显示正确,但是在... 查看详情

megacli入坑指南

MegaCli是LSI公司官方提供的SCSI卡管理工具,由于LSI被收购变成了现在的Broadcom,所以现在想下载MegaCli,需要去Broadcom官网查找Legacy产品支持,搜索MegaRAID即可。 现在官方有storcli,整合了LSI和3ware所有产品。但是个人认为Megacli... 查看详情

megacli入坑指南

MegaCli是LSI公司官方提供的SCSI卡管理工具,由于LSI被收购变成了现在的Broadcom,所以现在想下载MegaCli,需要去Broadcom官网查找Legacy产品支持,搜索MegaRAID即可。 现在官方有storcli,整合了LSI和3ware所有产品。但是个人认为Megacli... 查看详情

openstack入坑指南

 什么是云计算概念云计算是一种基于互联网的计算方式,通过这种方式,共享的软硬件资源和信息,可以按需求提供给计算机和其他设备。用户不需要了解”云“中的基础设施细节,不必具有相应的专业知识,也无需... 查看详情

docker入坑指南之run(代码片段)

...了,启动便捷,镜像还原很快捷,除了上手不容易。最近入坑研究了一番,小有心得,故写一篇杂文,记录自己的踩坑经历。安装Docker的过程可以参考其他前辈的文章,不再赘述,从实战角度说,如何构建一个自用的Docker镜像。... 查看详情

react-native环境配置入坑指南.

官方入门教程:https://reactnative.cn/docs/0.51/getting-started.htmlhttp://services.gradle.org/distributions/1.安装好javasdk,andriodsdk,androidstudio。2.配置环境变量。3.下载一个gradle,并修改为本地离线下载4.react-nativerun-android调试ad 查看详情

3.shodan新手入坑指南(代码片段)

什么是Shodan?首先,Shodan是一个搜索引擎,但它与Google这种搜索网址的搜索引擎不同,Shodan是用来搜索网络空间中在线设备的,你可以通过Shodan搜索指定的设备,或者搜索特定类型的设备,其中Shodan上最受欢迎的搜索内容是:web... 查看详情

docker入坑指南之exec(代码片段)

容器启动之后,如果我们需要进入容器内修改配置,比如mysql修改启动配置我们启动的附加参数是不是shell,这个时候就可以用dockerexec了,docker除了对image参数以外,大部分命令,可以多docker容器ID操作的,也可以对docker容器别名... 查看详情

阿里云入坑指南&&nodejs安装配置

 买了阿里云1G1核1M的机器(800元,3年)登录阿里云-实例-选择实例所在地区-重置密码用公网IPssh连接 nodejs安装配置#更新阿里云版本yum-yupdatecd/usr/local/src,这个文件夹通常用来存放软件源代码#wget命令下载Node.js安装包。wget是一... 查看详情

angular2入坑指南——管道(搜索功能)

想必大家做项目都会遇到搜索功能吧,通常都是搜索本地数据,如果通过http去请求后台再回显的话,那响应速度简直叫人抓狂,所以大多数都是先存到本地然后进行搜索回显。Angular1的方法很简单,只需要在input标签加入ng-model... 查看详情

kotlin快速入坑指南(干货型文档)(代码片段)

<pstyle="text-align:center;color:#42A5F5;font-size:2em;font-weight:bold;">前言即使每天10点下班,其实需求很多,我也要用这腐朽的声带喊出:我要学习,我要写文章!!又是一篇Kotlin的文章,为啥...还不是因为工作需要。毫无疑问... 查看详情

android适配入坑指南+解决痛点

概述Android屏幕尺寸各异,而我们不可能根据各种尺寸都设计一套原型图去匹配,我们需要利用适配这一个过程把同一张原型图设计的样式尽可能以同样地视觉效果呈现在不同地屏幕上。Android适配最核心的问题有两个࿰... 查看详情

2021入坑机器学习,有这份指南就够了

这是一份适用于小白的机器学习超丰富资源指南。机器学习社区社交媒体上经常有人提出这样的问题:我如何开始机器学习?我如何免费学习?什么是人工智能?我怎样才能学会它?人工智能是如何工作的ÿ... 查看详情

学会python真的有高收入?盯,请查收这份入坑指南(代码片段)

...限于初学阶段,真的比不上各位大神。对于那些打算入坑Python的小伙伴,想必会有疑问,Python可以为你带来高收入吗?好了,看了这些,是不是真的就认定Python可以拿高薪?这可不一定的。就好比大家... 查看详情

树莓派zerow入坑指南(代码片段)

入坑契机说起创客不得不提到开源硬件RaspberryPi(树莓派)。它是一款基于ARM的微型电脑主板,以MicroSD卡为硬盘,提供HDMI和USB等外部接口,可连接显示器和键鼠。以上部件全部整合在一张仅比信用卡稍大的主板上,具备所有PC的基... 查看详情