源码编译安装YouCompleteMe步骤

1、源码编译安装YouCompleteMe步骤
1.1、确保vim版本在7.4.143+,同时要支持python2或者python3,
不满足这个条件就重新编译vim,vim不能同时支持python2和python3
vim --version查看vim版本和vim支持的脚本
1.2、源码编译gcc-7.1.0
1.3、下载YouCompleteMe插件
git clone --recursive https://github.com/Valloric/YouCompleteMe.git
#获取最新的ycm软件包
git submodule update --init --recursive
#检查完整性,不完整者该命令会继续下载
1.4、下载libclang(版本>=3.9)
Clang for Fedora23 i686 Linux (.sig)
#因为clang网站没有CentOS的,而fedora和CentOS都是RedHat系列,因此使用fedora
cd /usr/local/src
wget http://releases.llvm.org/3.9.0/clang+llvm-3.9.0-i686-fedora23.tar.xz
mkdir -p ~/download/clang+llvm
tar -Jxvf clang+llvm-3.9.0-i686-fedora23.tar.xz -C ~/download/clang+llvm
1.5、安装cmake和python-dev、python34-dev
centos的开发包叫做python-devel、python34-devel
#使用epel软件源,因为python34-dev在这里,当不知道自己平台下的软件包叫什么名字的时候,可以使用yum search 或者yum list来查找
yum install epel-release 
yum -y install cmake
yum -y install python-devel python34-devel 
或者也可以自己源码安装python2、或者python3,但是记得在~/.bash_profile
配置文件中指定PATH、C_INCLUDE_PATH、LD_LIBRARY_PATH 、LIBRARY_PATH、/etc/ld.so.conf
1.6、 创建目录用来保存编译结果
mkdir ~/download/ycm_build
cd ~/download/ycm_build/
1.7、生成ycm_core库文件(有四种情况,使用官网推荐的)
#需要指定新编译的gcc编译器路径,否则会使用原生编译器
export CC="自定义gcc路径"
export CXX="自定义g++路径"
#生成makefile
cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=~/download/clang+llvm . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
#生成ycm_core
cmake --build . --target ycm_core --config Release
1.8、安装完成

 

2、生成ycm_core库文件四种情况
2.1、如果不想使用C语言的语义
cmake -G "" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
2.2、使用C语言的语义
a、从官网下载llvm+clang,使用官网推荐使用的libclang
cmake -G "" -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
#~/ycm_temp/llvm_root_dir是被解压出来目录
b、使用系统的libclang
cmake -G "" -DUSE_SYSTEM_LIBCLANG=ON . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
c、使用用户自定义的libclang
cmake -G "" -DEXTERNAL_LIBCLANG_PATH=/path/to/libclang.so . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
#
在Unix 或者Unix-like 是Unix Makefiles,在window上我也不知道


3、设置.ycm_extra_conf.py位置
3.1、let g:ycm_server_python_interpreter='/usr/local/python-2.7.14/bin/python'
3.2、let g:ycm_global_ycm_extra_conf='~/.vim/.ycm_extra_conf.py'
3.3、在当工程目录放置.ycm_extra_conf.py


4、设置tags文件
#sys.tags
cd /usr/include/
ctags -R --c-kinds=+l+x+p --fields=+lS -I __THROW,__nonnull -f sys.tags
#stdcpp.ctags
cd /usr/include/c++/4.4.7
ctags -R --c++-kinds=+l+x+p --fields=+iaSl --extra=+q --language-force=c++ -f stdcpp.tags

 

5、错误处理

完成上面的安装的时候,打开vim,报错
5.1、查看调试信息,输入":YcmDebugInfo"
5.2、出现的错误信息
a、/lib/libc.so.6:version GLIBC2.15+ no found
查看发现/lib/libc.so.6是软连接
libc.so.6 -> libc-2.12.so
strings libc-2.12.so | grep GLIBC 
可以查看GLIBC的版本,需要升级/lib/libc.so.6到version GLIBC2.15+版本,而该动态库存在于glibc2.15+,因此源码安装glibc2.15+
b、/usr/lib/libstdc++.so.6 :version GLIBCXX 3.4.20+ no found
查看发现/usr/lib/libstdc++.so.6是软连接
libstdc++.so.6 -> libstdc++.so.6.0.18
strings libstdc++.so.6.0.18 | grep GLIBCXX 
可以查看GLIBCXX,需要升级/usr/lib/libstdc++.so.6到version GLIBCXX 3.4.20+版本,而该动态库存在gcc源码中,可以直接升级gcc到gcc-7.1.0,
在gcc-7.1.0的lib目录中,他们直接的关系是:
lrwxrwxrwx. 1 root root 19 10月 21 06:24 libstdc++.so -> libstdc++.so.6.0.23
lrwxrwxrwx. 1 root root 19 10月 21 06:24 libstdc++.so.6 -> libstdc++.so.6.0.23
-rwxr-xr-x. 1 root root 9152407 10月 21 06:23 libstdc++.so.6.0.23
-rw-r--r--. 1 root root 2408 10月 21 06:23 libstdc++.so.6.0.23-gdb.py
直接把这四个文件复制到/usr/lib,使用命令:
cp -f libstdc++.so libstbc++.so.6 /usr/lib
cp -f libstdc++.so.6.0.23 libstdc++.so.6.0.23-gdb.py /usr/lib

6、关于编译glibc2.15和gcc7.1.0的疑问
1,我编译gcc7.1.0、glibc2.15的时候,为什么不能使用我源码安装的编译器编译,而必须使用原生编译器?
自己答:我觉得可能是因为configure在编译的时候会到系统指定目录找原生的编译器,可以使用环境变量CC和CXX来指定自定义编译器的位置
cmake也是一样,因为cmake和configure都是生产makefile文件的工具

参考网站:https://stackoverflow.com/questions/17275348/how-to-specify-new-gcc-path-for-cmake

你可能感兴趣的:(Linux)