标签:linux c/c++程序员centos 6.5安装youcompleteme使用vim语法自动补全
标题: Linux C/C++程序员CentOS 6.5安装YouCompleteMe使用vim语法自动补全
Ubuntu/Debian/Fedora比较好安装,各种软件包都比较新
CentOS6系列很难装,各种软件包版本太低了
新手不要尝试在CentOS6系上安装,会有一种挫败感!
步骤:
1, 安装操作系统
2, 文件下载
3, 更新vim
4, 安装ycm 和 Vundle
5, 编译clang
6, 编译ycm_core
7, 效果图
8, 清理工作
1, 安装操作系统:
CentOS-6.5 基于Basic Server安装 http://archive.kernel.org/centos-vault/6.5/isos/i386/CentOS-6.5-i386-bin-DVD1.iso http://archive.kernel.org/centos-vault/6.5/isos/x86_64/CentOS-6.5-x86_64-bin-DVD1.iso 我习惯尽量不使用root权限,创建普通用户 [root@CentOS ~]# useradd chunli [root@CentOS ~]# passwd chunli [root@CentOS ~]# vim /etc/sudoers chunli ALL=(ALL) ALL [root@CentOS ~]# logout chunli@ubuntu ~ ssh chunli@11.11.11.4 Last login: Tue Mar 7 06:58:18 2017 from chunli-pc [chunli@CentOS ~]$
2, 文件下载,自己去官网下载
Python-2.7.13.tar.xz gcc-6.3.0.tar.bz2 cmake-3.8.0-rc2.tar.gz clang与llvm的文件 cfe-3.9.1.src.tar.xz clang-tools-extra-3.9.1.src.tar.xz compiler-rt-3.9.1.src.tar.xz llvm-3.9.1.src.tar.xz
3, 更新vim
Ensure that your version of Vim is at least 7.4.143 and that it has support for Python 2 or Python 3 scripting.
查看系统的vim ,版本太低了! [chunli@CentOS ~]$ vim --version VIM - Vi IMproved 7.2 (2008 Aug 9, compiled Apr 5 2012 10:12:47) 在线升级vim [chunli@CentOS ~]$ sudo yum update vim #提示是7.4.629 [chunli@CentOS ~]$ vim --version VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 21 2016 17:06:34) Included patches: 1-207, 209-629 [chunli@CentOS ~]$ vim --version| grep python #查看vim对python的支持 +cryptv +linebreak +python/dyn +viminfo +cscope +lispindent -python3 +vreplace vim 问题解决了!!!
4,安装ycm, vundle
Install YCM with Vundle (or Pathogen, but Vundle is a better idea).
With Vundle, this would mean adding a Plugin ‘Valloric/YouCompleteMe‘ line to your vimrc.
这个步骤简单,一般不会有错
[chunli@CentOS ~]$ sudo yum install git [chunli@CentOS ~]$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim [chunli@CentOS ~]$ vim ~/.vimrc [chunli@CentOS ~]$ cat ~/.vimrc set nocompatible filetype off set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() Plugin ‘VundleVim/Vundle.vim‘ Plugin ‘Valloric/YouCompleteMe‘ call vundle#end() filetype plugin indent on [chunli@CentOS ~]$ [chunli@CentOS ~]$ vim +PluginInstall +qall #大约15分钟 [chunli@CentOS ~]$ echo $? [chunli@CentOS ~]$ du -sh ~/.vim/bundle/YouCompleteMe/ 221M /home/chunli/.vim/bundle/YouCompleteMe/
5 源码编译clang !!!
Complete this step ONLY if you care about semantic completion support for C-family languages. Otherwise it‘s not necessary ‘
Download the latest version of libclang,YCM is designed to work with libclang version 3.9 or higher.
欢迎来到极易出错的地方, 源码编译clang !
[chunli@CentOS ~]$ cd llvm-3.9.1/ [chunli@CentOS llvm-3.9.1]$ tar xf llvm-3.9.1.src.tar.xz [chunli@CentOS llvm-3.9.1]$ tar xf clang-tools-extra-3.9.1.src.tar.xz [chunli@CentOS llvm-3.9.1]$ tar xf compiler-rt-3.9.1.src.tar.xz [chunli@CentOS llvm-3.9.1]$ tar xf cfe-3.9.1.src.tar.xz [chunli@CentOS llvm-3.9.1]$ mv cfe-3.9.1.src llvm-3.9.1.src/tools/clang [chunli@CentOS llvm-3.9.1]$ mv clang-tools-extra-3.9.1.src llvm-3.9.1.src/tools/clang/tools/extra [chunli@CentOS llvm-3.9.1]$ mv compiler-rt-3.9.1.src llvm-3.9.1.src/projects/compiler-rt [chunli@CentOS llvm-3.9.1]$ cmake -G"Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$HOME/clang3.9 -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" llvm-3.9.1.src && make -j 4 报错1:-bash: cmake: command not found ----------------------------------------------- 解决报错1: 编译安装最新的cmake [chunli@CentOS ~]$ tar xf cmake-3.8.0-rc2.tar.gz [chunli@CentOS ~]$ cd cmake-3.8.0-rc2 [chunli@CentOS cmake-3.8.0-rc2]$ ./bootstrap Error when bootstrapping CMake: Cannot find appropriate C compiler on this system. Please specify one using environment variable CC. See cmake_bootstrap.log for compilers attempted. 报错2:Cannot find appropriate C compiler on this system. ----------------------------------------------- 解决报错2:安装编译器 [chunli@CentOS cmake-3.8.0-rc2]$ sudo yum install gcc [chunli@CentOS cmake-3.8.0-rc2]$ sudo yum install gcc-c++ 继续编译cmake [chunli@CentOS cmake-3.8.0-rc2]$ ./bootstrap [chunli@CentOS cmake-3.8.0-rc2]$ echo $? [chunli@CentOS cmake-3.8.0-rc2]$ make -j 4 [chunli@CentOS cmake-3.8.0-rc2]$ echo $? [chunli@CentOS cmake-3.8.0-rc2]$ sudo make install [chunli@CentOS cmake-3.8.0-rc2]$ echo $? cmake 安装完成 ----------------------------------------------------- 继续编译clang, 报错3:Host GCC version must be at least 4.7! [chunli@CentOS llvm-3.9.1]$ cmake -G"Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$HOME/clang3.9 -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" llvm-3.9.1.src && make -j 4 CMake Error at cmake/modules/CheckCompilerVersion.cmake:12 (message): Host GCC version must be at least 4.7! Call Stack (most recent call first): cmake/config-ix.cmake:14 (include) CMakeLists.txt:461 (include) ----------------------------------------------------------------- 解决报错3:需要高版本编译器 [chunli@CentOS ~]$ gcc --version #查看系统gcc版本,确实低! gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-17) [chunli@CentOS ~]$ tar xf gcc-6.3.0.tar.bz2 [chunli@CentOS ~]$ cd gcc-6.3.0 [chunli@CentOS gcc-6.3.0]$ ./contrib/download_prerequisites #约10分钟,自动下载依赖包 [chunli@CentOS gcc-6.3.0]$ echo $? [chunli@CentOS gcc-6.3.0]$ ./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib && make -j 4 #约1小时 [chunli@CentOS gcc-6.3.0]$ echo $? #查看编译是否完成 [chunli@CentOS gcc-6.3.0]$ sudo yum remove gcc #确认移除自带的编译器 [chunli@CentOS gcc-6.3.0]$ sudo yum remove g++ #确认移除自带的编译器 [chunli@CentOS gcc-6.3.0]$ sudo yum remove gcc-c++ [chunli@CentOS gcc-6.3.0]$ gcc #检查是否真的移除了 -bash: gcc: command not found [chunli@CentOS gcc-6.3.0]$ g++ -bash: g++: command not found [chunli@CentOS gcc-6.3.0]$ sudo make install #开始安装最新的编译器 [chunli@CentOS gcc-6.3.0]$ echo $? [chunli@CentOS gcc-6.3.0]$ gcc --version #检查新版的编译器 gcc (GCC) 6.3.0 [chunli@CentOS gcc-6.3.0]$ g++ --version g++ (GCC) 6.3.0 编译器安装完成 ------------------------------------------------------- 继续编译clang, 然而又报错啦4:找不到编译器 [chunli@CentOS llvm-3.9.1]$ cmake -G"Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$HOME/clang3.9 -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" llvm-3.9.1.src && make -j 4 CMake Error at CMakeLists.txt:48 (project): The CMAKE_C_COMPILER: /usr/bin/cc CMake Error at CMakeLists.txt:48 (project): The CMAKE_CXX_COMPILER: /usr/bin/c++ CMake Error at CMakeLists.txt:48 (project): The CMAKE_ASM_COMPILER: /usr/bin/cc [chunli@CentOS llvm-3.9.1]$ cmake -G"Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$HOME/clang3.9 -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" llvm-3.9.1.src && make -j 4 ----------------------------------- 报错4, 解决方案 [chunli@CentOS llvm-3.9.1]$ which gcc /usr/local/bin/gcc [chunli@CentOS llvm-3.9.1]$ which g++ /usr/local/bin/g++ 设置编译器路径,继续编译clang [chunli@CentOS llvm-3.9.1]$ cmake -G"Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$HOME/clang3.9 -DCMAKE_ASM_COMPILER=/usr/local/bin/gcc -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_CXX_COMPILER=/usr/local/bin/g++ -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" llvm-3.9.1.src && make -j 4 ---------------------------- 报错5:需求新版的python [chunli@CentOS llvm-3.9.1]$ cmake -G"Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$HOME/clang3.9 -DCMAKE_ASM_COMPILER=/usr/local/bin/gcc -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_CXX_COMPILER=/usr/local/bin/g++ -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" llvm-3.9.1.src && make -j 4 CMake Error at CMakeLists.txt:488 (message): Python 2.7 or newer is required ------------------------------ 报错5 解决方法:编译安装python2.7 [chunli@CentOS llvm-3.9.1]$ python --version #查看当前python版本 Python 2.6.6 [chunli@CentOS llvm-3.9.1]$ yum list | grep python | grep 2.7 #仓库没有2.7版本 [chunli@CentOS ~]$ tar xf Python-2.7.13.tar.xz [chunli@CentOS ~]$ cd Python-2.7.13 [chunli@CentOS Python-2.7.13]$ ./configure --prefix=$HOME/python-2.7 #安装位置随意,自己家有写权限 [chunli@CentOS Python-2.7.13]$ echo $? [chunli@CentOS Python-2.7.13]$ make -j 4 [chunli@CentOS Python-2.7.13]$ make install [chunli@CentOS Python-2.7.13]$ echo $? 修改python路径 [chunli@CentOS Python-2.7.13]$ which python /usr/bin/python [chunli@CentOS Python-2.7.13]$ ll /usr/bin/python* -rwxr-xr-x. 2 root root 6088 Nov 22 2013 /usr/bin/python lrwxrwxrwx. 1 root root 6 Mar 5 23:29 /usr/bin/python2 -> python -rwxr-xr-x. 2 root root 6088 Nov 22 2013 /usr/bin/python2.6 [chunli@CentOS Python-2.7.13]$ sudo ln -s -f $HOME/python-2.7/bin/python2.7 /usr/bin/python [chunli@CentOS Python-2.7.13]$ python --version Python 2.7.13 新版python就这样安装好了 ----------------------- 继续编译clang,报错6 ,C++库版本低! [chunli@CentOS llvm-3.9.1]$ cmake -G"Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$HOME/clang3.9 -DCMAKE_ASM_COMPILER=/usr/local/bin/gcc -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_CXX_COMPILER=/usr/local/bin/g++ -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" llvm-3.9.1.src && make -j 4 ../../bin/llvm-tblgen: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.20‘ not found (required by ../../bin/llvm-tblgen) ../../bin/llvm-tblgen: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15‘ not found (required by ../../bin/llvm-tblgen) ../../bin/llvm-tblgen: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.21‘ not found (required by ../../bin/llvm-tblgen) ‘ ------------------------------ 解决报错6:手动修改旧版c++库文件 [chunli@CentOS ~]$ find /usr/local/ -name ‘libstdc++.so.6*‘ /usr/local/lib/libstdc++.so.6.0.22 /usr/local/lib/libstdc++.so.6 [chunli@CentOS ~]$ ll /usr/lib/libstdc++.so.6 lrwxrwxrwx. 1 root root 19 Mar 11 18:23 /usr/lib/libstdc++.so.6 -> libstdc++.so.6.0.13 [chunli@CentOS ~]$ sudo rm -rf /usr/lib/libstdc++.so.6 [chunli@CentOS ~]$ sudo ln -s /usr/local/lib/libstdc++.so.6.0.22 /usr/lib/libstdc++.so.6 ---------------------------------------------------------------------- 继续编译clang [chunli@CentOS llvm-3.9.1]$ cmake -G"Unix Makefiles" -DCMAKE_INSTALL_PREFIX=$HOME/clang3.9 -DCMAKE_ASM_COMPILER=/usr/local/bin/gcc -DCMAKE_C_COMPILER=/usr/local/bin/gcc -DCMAKE_CXX_COMPILER=/usr/local/bin/g++ -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" llvm-3.9.1.src && make -j 4 [chunli@CentOS llvm-3.9.1]$ echo $? 终于编译好了!
6, 编译 ycm_core
Compile the ycm_core library that YCM needs. This library is the C++ engine that YCM uses to get fast completions.
[chunli@CentOS ~]$ mkdir ycm_build [chunli@CentOS ~]$ cd ycm_build [chunli@CentOS ycm_build]$ cmake -G "Unix Makefiles" -DEXTERNAL_LIBCLANG_PATH=/home/chunli/llvm-3.9.1/lib/libclang.so . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp 报错7: 找不到python-devel CMake Error at /usr/local/share/cmake-3.8/Modules/FindPackageHandleStandardArgs.cmake:137 (message): Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS) (Required is at least version "2.6") --------------------------------------- 解决报错7 安装python-dev [chunli@CentOS ycm_build]$ sudo yum install python-devel ---------------------------------- 报错8,发现ycm不能用 ,是因为python的问题 There was a problem importing one of the Python modules required to run yum. The error leading to this problem was: No module named yum ------------------------------------- 解决报错8 ,修改yum配置 [chunli@CentOS ycm_build]$ which python /usr/bin/python [chunli@CentOS ycm_build]$ ll /usr/bin/python* lrwxrwxrwx. 1 root root 37 Mar 11 21:22 /usr/bin/python -> /home/chunli/python-2.7/bin/python2.7 lrwxrwxrwx. 1 root root 6 Mar 5 23:29 /usr/bin/python2 -> python -rwxr-xr-x. 1 root root 6088 Nov 22 2013 /usr/bin/python2.6 [chunli@CentOS ycm_build]$ [chunli@CentOS ycm_build]$ sudo vim /usr/bin/yum [chunli@CentOS ycm_build]$ cat /usr/bin/yum - #!/usr/bin/python + #!/usr/bin/python2.6 [chunli@CentOS ycm_build]$ sudo yum install python-devel yum, python-devel解决了 ----------------------------------- 继续编译ycm_core [chunli@CentOS ycm_build]$ cmake -G "Unix Makefiles" -DEXTERNAL_LIBCLANG_PATH=/home/chunli/llvm-3.9.1/lib/libclang.so . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp [chunli@CentOS ycm_build]$ echo $? [chunli@CentOS ycm_build]$ cmake --build . --target ycm_core --config Release [chunli@CentOS ycm_build]$ cp ~/.vim/bundle/YouCompleteMe/third_party/ycmd/examples/.ycm_extra_conf.py ~/.vim/ [chunli@CentOS ycm_build]$ vim ~/.vimrc #添加两行 let g:ycm_server_python_interpreter=‘/usr/bin/python‘ let g:ycm_global_ycm_extra_conf=‘~/.vim/.ycm_extra_conf.py‘ ================================================ 启动vim 报错9, The ycmd server SHUT DOWN (restart with ‘:YcmRestartServer‘). Unexpected error while loading the YCM core library. Use the ‘:YcmToggleLogs‘ command to check the logs. :YcmToggleLogs #查看错误信息 Available logfiles are: ycm_jHhxre.log ycmd_50555_stderr_V6wuYO.log ycmd_50555_stdout_Rm520B.log Press ENTER or type command to continue 在ycm_jHhxre.log文件中全是报错: Failed to establish a new connection 在ycmd_50555_stderr_V6wuYO.log文件中报错 ImportError: /usr/lib/libstdc++.so.6: version ‘GLIBCXX_3.4.20‘ not found (required by /home/chunli/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/../ycm_core.so) 文件ycmd_50555_stdout_Rm520B.log是空的 ========================================== 解决报错9, GLIBCXX_3.4.20 not found [chunli@CentOS ~]$ find /usr/ -name ‘libstdc++.so.6*‘ /usr/local/lib/libstdc++.so.6.0.22 /usr/local/lib/libstdc++.so.6 /usr/lib/libstdc++.so.6 /usr/lib/libstdc++.so.6.0.13 [chunli@CentOS ~]$ [chunli@CentOS ~]$ sudo ln -f -s /usr/local/lib/libstdc++.so.6.0.22 /usr/lib/libstdc++.so.6 [chunli@CentOS ~]$ ll /usr/lib/libstdc++.so.6* lrwxrwxrwx. 1 root root 34 Mar 12 01:27 /usr/lib/libstdc++.so.6 -> /usr/local/lib/libstdc++.so.6.0.22 -rwxr-xr-x. 1 root root 942040 May 10 2016 /usr/lib/libstdc++.so.6.0.13 [chunli@CentOS ~]$ ycm其他命令 :YcmRestartServer :messages :YcmDiags :YcmDebugInfo
7 效果图
历经千辛万苦, ycm终于可以正常使用了!
先来几种自动补全图!!!!
结构体补全1
结构体补全2
头文件补全
语法检查
ycm的工作模式,很明显是CS模式
没有运行vim时,没有ycm进程 [chunli@CentOS ~]$ sudo ps aux| grep ycm chunli 3408 0.0 0.0 4356 744 pts/3 S+ 01:40 0:00 grep ycm
打开一个C文件,进入自动补全状态
[chunli@CentOS ~]$ sudo ps aux | grep ycm #会看到一个ycm守护进程 chunli 4075 20.0 0.4 406820 19460 ? Ssl 01:48 0:00 /usr/bin/python /home/chunli/.vim/bundle/YouCompleteMe/python/ycm/../../third_party/ycmd/ycmd --port=54985 --options_file=/tmp/tmp0bDvy3 --log=info --idle_suicide_seconds=10800 --stdout=/tmp/ycmd_39292_stdout_oaYfWe.log --stderr=/tmp/ycmd_39292_stderr_VWlF6c.log chunli 4114 0.0 0.0 4356 720 pts/2 S+ 01:49 0:00 grep ycm [chunli@CentOS ~]$ sudo netstat -tunlap | grep python tcp 0 0 127.0.0.1:49705 0.0.0.0:* LISTEN 4233/python tcp 0 0 127.0.0.1:49705 127.0.0.1:41286 ESTABLISHED 4233/python tcp 0 0 127.0.0.1:49705 127.0.0.1:41288 ESTABLISHED 4233/python tcp 0 0 127.0.0.1:49705 127.0.0.1:41287 ESTABLISHED 4233/python [chunli@CentOS ~]$
8 清理工作:
[chunli@CentOS ~]$ rm -rf cmake-3.8.0-rc2* [chunli@CentOS ~]$ rm -rf Python-2.7.13.* [chunli@CentOS ~]$ rm -rf python-2.7/ [chunli@CentOS ~]$ rm -rf clang3.9/ [chunli@CentOS ~]$ rm -rf llvm-3.9.1/ [chunli@CentOS ~]$ rm -rf gcc-6.3.0* [chunli@CentOS ~]$ rm -rf ycm_build/
clang 编译好了之后,不用安装,仅仅为了得到libclang.so
python2.7 也是临时的,作为clang的依赖 不需要安装什么第三方库
gcc 也可以是临时的, 用来编译clang, 还可以得到libc++.so
奇怪的问题,我前面已经替换过这个文件/usr/bin/python,我以为清理python2.7.13后vim不能用了.
但是vim 的自动补全没有任何影响,来看看/usr/bin/python --version 又是2.6版本, 郁闷!
难道是安装python-devel时自动恢复/usr/bin/python为python2.6了 ?
[chunli@CentOS ~]$ ll /usr/bin/python* -rwxr-xr-x. 2 root root 3592 Aug 18 2016 /usr/bin/python lrwxrwxrwx. 1 root root 6 Mar 12 00:44 /usr/bin/python2 -> python -rwxr-xr-x. 2 root root 3592 Aug 18 2016 /usr/bin/python2.6 -rwxr-xr-x. 1 root root 1418 Aug 18 2016 /usr/bin/python2.6-config lrwxrwxrwx. 1 root root 16 Mar 12 00:44 /usr/bin/python-config -> python2.6-config [chunli@CentOS ~]$
本文出自 “魂斗罗” 博客,请务必保留此出处http://990487026.blog.51cto.com/10133282/1905427
Linux C/C++程序员CentOS 6.5安装YouCompleteMe使用vim语法自动补全
标签:linux c/c++程序员centos 6.5安装youcompleteme使用vim语法自动补全
原文地址:http://990487026.blog.51cto.com/10133282/1905427