Centos7安装YouCompleteMe(一)

1、关于YouCompleteMe

github:https://github.com/Valloric/YouCompleteMe
YouCompleteMe是一个vim的插件,它支持对C++、Python等语言的自动补全,简称为YCM。YCM 由 google 公司搜索项目组的软件工程师 Strahinja Val Markovic 所开发,YCM 后端调用 libclang(以获取AST,当然还有其他语言的语义分析库)、前端由 C++ 开发(以提升补全效 率)、外层由 python 封装(以成为 vim 插件。 YCM安装前要仔细阅读其github下的README.md文件(重点看Full Installation Guide下的Unix安装部分)。

2、安装准备检测

系统环境为Centos7_x64。检查vim版本,版本至少为7.4.1578,同时需要支持python2或python3,检测方法为打开vim,命令行输入
:echo has('python') || has('python3')
输出为1,则表示持python2或python3。如果不支持则需要重新源码安装vim使其支持。

3、通过vundle安装YCM

使用vundle安装YCM相当于只是给vimrc添加一个插件'Valloric/YouCompleteMe'。(以下均以root用户权限操作)
vim ~/.vimrc

添加插件

call vundle#begin()  
...
Plugin 'Valloric/YouCompleteMe'  
...
call vundle#end()  

打开vim安装

:PluginInstall

可能需要等一段时间,大约半个小时以内吧,安装完后会新增YouCompleteMe目录
这里写图片描述

4、添加对C/C++语言支持库

下载最新版的 libclang,clang版本至少3.9。Clang是一个C语言、C++、Objective-C、Objective-C++语言的轻量级编译器。源代码发布于BSD协议下。Clang将支持其普通lambda表达式、返回类型的简化处理以及更好的处理constexpr关键字。Clang是一个C++编写、基于LLVM、发布于LLVM BSD许可证下的C/C++/Objective-C/Objective-C++编译器。它与GNU C语言规范几乎完全兼容(当然,也有部分不兼容的内容,包括编译命令选项也会有点差异),并在此基础上增加了额外的语法特性。由于yum源最新版本是3.4.2,且官网也没给出专门为Centos适配的二进制包,所以采用源码安装。
下载源码及安装:

wget http://releases.llvm.org/5.0.0/llvm-5.0.0.src.tar.xz
wget http://releases.llvm.org/5.0.0/cfe-5.0.0.src.tar.xz
wget http://releases.llvm.org/5.0.0/compiler-rt-5.0.0.src.tar.xz

tar -Jxvf llvm-5.0.0.src.tar.xz
mv llvm-5.0.0.src.tar.xz llvm

tar -Jxvf cfe-5.0.0.src.tar.xz -C ./llvm/tools
cd ./llvm/tools
mv cfe-5.0.0.src clang

cd ../..
tar -Jxvf compiler-rt-5.0.0.src.tar.xz -C ./llvm/projects/
cd ./llvm/projects/
mv compiler-rt-5.0.0.src compiler-rt

尝试使用configure安装(llvm为了防止编译的中间结果分布在码源目录中,影响码源的结构。因此不支持目录内编译。需要在码源目录外创建额外的编译目录build)

cd ../..
mkdir build
cd build/
../llvm/configure --enable-optimized CC=gcc CXX=g++

这里写图片描述

提示应使用CMake安装

cd ./build
cmake -G  "Unix Makefiles" ../llvm

cmake生成makefile完成
这里写图片描述

开始安装(要有root权限)

make -j4
make

三次make 均出现编译错误!
这里写图片描述
这里写图片描述
这里写图片描述

下载二进制版(初步使用第二个)

wget http://releases.llvm.org/5.0.0/clang+llvm-5.0.0-aarch64-linux-gnu.tar.xz

wget http://releases.llvm.org/4.0.1/clang+llvm-4.0.1-x86_64-linux-gnu-Fedora-25.tar.xz

解压缩到指定目录

tar -Jxvf clang+llvm-4.0.1-x86_64-linux-gnu-Fedora-25.tar.xz
mv clang+llvm-4.0.1-x86_64-linux-gnu-Fedora-25.tar.xz clang_llvm
cp -R ./clang_llvm /usr/local/

5 编译 ycm_core 库

编译前需要确认是否安装python-devel 或python3-devel,版本最好与所安装的python一致。
这里写图片描述

经查看相应版本已安装

yum search python3 | grep devel

这里写图片描述

yum info python34-devel.x86_64

这里写图片描述

新建相关目录

mkdir ycm_build
mkdir ycm_temp
cd ycm_temp
cp -R xxx/clang_llvm ./
mv clang_llvm llvm_root_dir

使用cmake生成configuration文件

cd ../ycm_build
cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=/home/xxusernamexx/software/ycminstall/ycm_temp/llvm_root_dir . /opt/vim8/share/vim/bundle/YouCompleteMe/third_party/ycmd/cpp

这里写图片描述

编译安装

cmake --build . --target ycm_core

这里写图片描述

6 vim 安装后问题及解决

安装完使用vim 出错
这里写图片描述

问题:the ycmd server SHUT DOWN (restart with ‘:ycmRestartServer’). Unexpected error while loading the YCM core library. Type ‘:YcmToggleLogs ycmd_56544_stderr_99h8bjsp.log’ to check the logs

问题定位,在vim命令模式下输入:

:YcmToggleLogs ycmd_53106_stderr_lnyznte5.log

这里写图片描述

经搜索有 libtinfo.so.5,说明可能是配套软件版本比较旧的原因

[root@localhost lib64]# find / -name libtinfo.so.5
/usr/lib64/libtinfo.so.5

经搜索libtinfo 是由 libncurses提供的,查看当前ncurses(-devel)版本

yum info ncurses

这里写图片描述

yum update ncurses-devel

仍然不可以,下载最新rpm包安装最新版ncurses

wget ftp://rpmfind.net/linux/mageia/distrib/cauldron/armv5tl/media/core/release/libncurses6-6.0-9.mga7.armv5tl.rpm

[xxxxxx@localhost updates]$ rpm -i libncurses6-6.0-9.mga7.armv5tl.rpm
警告:libncurses6-6.0-9.mga7.armv5tl.rpm: 头V3 RSA/SHA1 Signature, 密钥 ID 80420f66: NOKEY
错误:依赖检测失败:
    libdl.so.2(GLIBC_2.4) 被 libncurses6-6.0-9.mga7.armv5tl 需要
    libgcc_s.so.1(GCC_3.5) 被 libncurses6-6.0-9.mga7.armv5tl 需要
    libstdc++.so.6(CXXABI_1.3.8) 被 libncurses6-6.0-9.mga7.armv5tl 需要
    libstdc++.so.6(CXXABI_1.3.9) 被 libncurses6-6.0-9.mga7.armv5tl 需要

降低clang版本重新安装

wget http://releases.llvm.org/3.9.0/clang+llvm-3.9.0-x86_64-fedora23.tar.xz

安装完后
这里写图片描述

[root@localhost lib64]# strings /usr/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH

libstdc++.so.6版本较旧

思路是升级GCC!!!
未完待续。。。。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值