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目錄
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++
提示應使用CMake安裝
cd ./build
cmake -G "Unix Makefiles" ../llvm
cmake生成makefile完成
開始安裝(要有root權限)
make -j4
make
三次make 均出現編譯錯誤!
下載下傳二進制版(初步使用第二個)
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一緻。
經檢視相應版本已安裝
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
編譯安裝
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.
經搜尋libtinfo 是由 libncurses提供的,檢視目前ncurses(-devel)版本
yum info ncurses
仍然不可以,下載下傳最新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版本重新安裝
安裝完後
[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!!!
未完待續。。。。。。