天天看點

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使用者權限操作)
           

添加插件

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

打開vim安裝

可能需要等一段時間,大約半個小時以内吧,安裝完後會新增YouCompleteMe目錄

Centos7安裝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//llvm-.src.tar.xz
wget http://releases.llvm.org//cfe-.src.tar.xz
wget http://releases.llvm.org//compiler-rt-.src.tar.xz

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

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

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

嘗試使用configure安裝(llvm為了防止編譯的中間結果分布在碼源目錄中,影響碼源的結構。是以不支援目錄内編譯。需要在碼源目錄外建立額外的編譯目錄build)

cd ../..
mkdir build
cd build/
../llvm/configure --enable-optimized CC=gcc CXX=g++
           
Centos7安裝YouCompleteMe(一)

提示應使用CMake安裝

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

cmake生成makefile完成

Centos7安裝YouCompleteMe(一)

開始安裝(要有root權限)

make -j4
make
           

三次make 均出現編譯錯誤!

Centos7安裝YouCompleteMe(一)
Centos7安裝YouCompleteMe(一)
Centos7安裝YouCompleteMe(一)

下載下傳二進制版(初步使用第二個)

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

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

解壓縮到指定目錄

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

5 編譯 ycm_core 庫

編譯前需要确認是否安裝python-devel 或python3-devel,版本最好與所安裝的python一緻。

Centos7安裝YouCompleteMe(一)

經檢視相應版本已安裝

Centos7安裝YouCompleteMe(一)
yum info python34-devel.x86_64
           
Centos7安裝YouCompleteMe(一)

建立相關目錄

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
           
Centos7安裝YouCompleteMe(一)

編譯安裝

Centos7安裝YouCompleteMe(一)

6 vim 安裝後問題及解決

安裝完使用vim 出錯

Centos7安裝YouCompleteMe(一)

問題: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
           
Centos7安裝YouCompleteMe(一)

經搜尋有 libtinfo.so.5,說明可能是配套軟體版本比較舊的原因

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

經搜尋libtinfo 是由 libncurses提供的,檢視目前ncurses(-devel)版本

yum info ncurses
           
Centos7安裝YouCompleteMe(一)

仍然不可以,下載下傳最新rpm包安裝最新版ncurses

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

[[email protected] updates]$ rpm -i libncurses6--mga7.armv5tl.rpm
警告:libncurses6--mga7.armv5tl.rpm: 頭V3 RSA/SHA1 Signature, 密鑰 ID f66: NOKEY
錯誤:依賴檢測失敗:
    libdl.so(GLIBC_2) 被 libncurses6--mga7.armv5tl 需要
    libgcc_s.so(GCC_3) 被 libncurses6--mga7.armv5tl 需要
    libstdc++.so(CXXABI_1) 被 libncurses6--mga7.armv5tl 需要
    libstdc++.so(CXXABI_1) 被 libncurses6--mga7.armv5tl 需要
           

降低clang版本重新安裝

安裝完後

Centos7安裝YouCompleteMe(一)
[root@localhost lib64]# strings /usr/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBCXX_3.
GLIBC_2.
GLIBC_2.
GLIBC_2.
GLIBC_2.
GLIBC_2.
GLIBCXX_DEBUG_MESSAGE_LENGTH
           

libstdc++.so.6版本較舊

思路是更新GCC!!!

未完待續。。。。。。