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安装部分)。
系统环境为Centos7_x64。检查vim版本,版本至少为7.4.1578,同时需要支持python2或python3,检测方法为打开vim,命令行输入
:echo has('python') || has('python3')
输出为1,则表示持python2或python3。如果不支持则需要重新源码安装vim使其支持。
使用vundle安装YCM相当于只是给vimrc添加一个插件'Valloric/YouCompleteMe'。(以下均以root用户权限操作)
vim ~/.vimrc
添加插件
call vundle#begin()
...
Plugin 'Valloric/YouCompleteMe'
...
call vundle#end()
打开vim安装
:PluginInstall
可能需要等一段时间,大约半个小时以内吧,安装完后会新增YouCompleteMe目录
下载最新版的 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
开始安装(要有root权限)
make -j4
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/
编译前需要确认是否安装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
问题: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 需要
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!!!
未完待续。。。。。。