2021-05-12 14:32:11
CentOS中安裝YouCompleteMe外掛詳解
本人在CentOS6.9和CentOS7中安裝測試過YouCompleteMe外掛,均無問題。整個安裝步驟如下:(寫的比較粗糙)
1,
win10 x64 : 通過無線網絡卡連線網路:
IP: 192.168.1.106
Netmast: 255.255.255.0
gateway: 192.168.1.1
DNS : 120.196.165.24
211.136.192.6
vmware中網路使用橋接方式 , 勾選 複製物理連線到網路 。選擇 對應的無線網絡卡其他都去掉。
Centos6.9-x64
IP: 192.168.1.6 /255.255.255.0 / 192.168.1.1 同一網段
CentOS7 - x86 要注意新增網絡卡,並注意網路設定,GATEWAY閘道器
1) 關閉虛擬機器. VMare workstation 對應虛擬機器安裝目錄中的.vmx新增ethernet0.virtualDev = "e1000"
2) 重新啟動,ip addr -> cp /etc/sysconfig/network-scripts/ifg-lo /ect/sysconfig/network-scripts/ifg-ens33
檢測 網路設定是否正確
ping 192.168.1.106
ping 192.168.1.1
ping www.linuxidc.com //pass
2, 虛擬機器新增一個硬碟用來學習 20G SCSI
reboot
fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
echo "/dev/sdb1 /learn ext4 defaults 0 0 " >> /etc/fstab
3, 新增使用者kk4728
useradd kk4728
passwd kk4728
新增sudo使用者, /etc/sudoers 新增 kk4728 ALL=(ALL) ALL
修改學習盤許可權
chown -R kk4728 /learn
chgrp -R kk4728 /learn
chmod -R 775 /learn
4, 設定環境變數
vi ~/.bash_profile新增
PATH=$PATH:.
讓系統可以查詢當前可執行檔案
5,同步時間
sudo yum install ntp
sudo ntpdate time.nist.gov
6 安裝依賴項
sudo yum install -y gcc gcc-c++ gdb ctags ncurses-devel libevent-devel git automake xz zlib-devel cmake libxml2 libxslt libxslt-devel kernel-devel wget openssl openssl-devel
CentOS7 中 預設安裝 gcc4.8.5
glibc-2.17
python-2.7.5
7, 升級glibc
wget http://ftp.gnu.org/pub/gnu/glibc/glibc-2.17.tar.xz
xz -d glibc-2.17.tar.xz
tar -xvf glibc-2.17.tar
cd glibc-2.17
mkdir build
cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
sudo make && make install
安裝時出錯 libc.a 寫許可權失敗 . 分開安裝
sudo make
sudo make install
驗證:
x64: strings /lib64/libc.so.6 | grep GLIBC
x86: strings /lib/libc.so.6 | grep GLIBC
如果這裡驗證失敗。應該是libc.so.6(軟連線)指向的路徑不對 這裡先不升級,按後期需要升級。libc.so.6指向的檔案太關鍵;
使用不當會引起系統無法登入或重新啟動, 輕則部分指令段錯誤!!!
find / -name "libc.so.6"
cp /usr/glibc-2.17/lib/libc-2.17.so /lib/libc-2.17.so
rm -rf /lib/libc.so.6
之後如果引發異常,主要是libc.so.6是系統核心連結庫。刪除後引發大部分指令出錯!
需要重新建立連結,但是ln 也是需要libc.so.6的。 需要手工新增LD_PRELOAD路徑
[root#localhost ~ ] LD_PRELOAD=/lib/libc-2.17.so ln -s /lib/libc-2.17.so /lib/libc.so.6
再次驗證OK
8,安裝Python2.7.13 (CentOS7 -> Python 2.7.5)
wget https://www.python.org/ftp/python/2.7.13/Python-2.7.13.tar.xz
xz -d Python-2.7.13.tar.xz
tar -xvf Python-2.7.13.tar
cd Python-2.7.13
./configure --enable-shared
sudo make
sudo make install
/usr/local/bin/python2.7 -V
提示錯誤
許可權切換回root
vi /etc/ld.so.conf 新增/usr/local/lib 儲存
/sbin/ldconfig
/sbin/ldconfig –v
mv /usr/bin/python /usr/bin/python.bak
ln -s /usr/local/bin/python2.7 /usr/bin/python
vi /usr/bin/yum
改成 #!/usr/bin/python2.6
將許可權切換回kk4728
8 元件安裝
安裝setuptools
wget https://bootstrap.pypa.io/ez_setup.py -O - | sudo python
pip安裝
wget –no-check-certificate https://github.com/pypa/pip/archive/7.1.0.tar.gz
tar zvxf 7.1.0.tar.gz #解壓檔案
cd pip-7.1.0
sudo python setup.py install
CentOS7 - x86
wget –no-check-certificate https://github.com/pypa/pip/archive/9.0.0.tar.gz
tar zvxf 9.0.0.tar.gz #解壓檔案
cd pip-9.0.0
sudo python setup.py install
許可權改為root
pip install requests
pip install lxml
pip install cssselect
安裝flake8
pip install flake8
許可權改回kk4728
9 升級vim8.0
wget https://github.com/vim/vim/archive/master.zip
許可權改成root
yum install unzip
unzip master.zip
cd vim-master
cd src/
./configure --with-features=huge --enable-python3interp --enable-pythoninterp=yes --enable-rubyinterp --enable-luainterp --enable-multibyte --enable-cscope
//--prefix=/usr/local/vim
//--enable-perlinterp
make
sudo make install
許可權改回kk4728
vim --version
驗證是否安裝vim --version | grep python
10 vimrc 外掛安裝
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
vim .bash_profile 中新增alias vi=vim
mv ~/.vimrc ~/.vimrc.bak
Vundle外掛管理的路徑:~/.vim/bundle/Vundle.vim
.vimrc暫時設定
"""""""""""""""""""""""""""""""""""""""""""""
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
" My Plugins here:
Plugin 'bling/vim-airline'
Plugin 'scrooloose/nerdtree'
Plugin 'kien/ctrlp.vim'
Plugin 'taglist.vim'
Plugin 'Valloric/YouCompleteMe'
Plugin 'winmanager'
let g:winManagerWindowLayout="NERDTree|TagList"
let g:NERDTree_title="[NERDTree]"
function! NERDTree_Start()
exec 'NERDTree'
endfunction
function! NERDTree_IsValid()
return 1
endfunction
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
//安裝時間較長 十幾分鐘
vim中:PluginInstall
cmd: vim +PluginInstall +qall
11 更新gcc至6.3.0 安裝時間太長 擔心許可權問題中途中斷。這裡全部使用root安裝
wget http://ftp.gnu.org/gnu/gcc/gcc-6.3.0/gcc-6.3.0.tar.bz2
tar -jxvf gcc-6.3.0.tar.bz2
cd gcc-6.3.0
./contrib/download_prerequisites
cd ..
mkdir gcc-build-6.3.0
cd gcc-build-6.3.0
../gcc-6.3.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
######################################################
這裡要注意:按需要移除之前gcc版本
yum remove gcc
yum remove g++
yum remove gcc-c++
/lib/cpp fails sanity check的解決方法
在某些軟體的時候,執行./configure 會報錯,錯誤提示為:
configure: error: C++ preprocessor “/lib/cpp” sanity check
check See `config.log’ for more details
######################################################
make -j7
make install
處理libstdc++.so.6 以處理器x86 x64不同而不同 find / -name "libstdc++.*"
x64: cp libstdc++.so.6.0.19 /usr/lib64/libstdc++.so.6.0.19
ln -sf /usr/lib64/libstdc++.so.6.0.19 /usr/lib64/libstdc++.so.6
x32: cp /usr/local/lib/libstdc++.so.6.0.22 /usr/lib/libstdc++.so.6.0.22
ln -sf /usr/lib/libstdc++.so.6.0.22 /usr/lib/libstdc++.so.6
輸入strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX檢視成功
strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
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
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
12 安裝clang : 這裡不再重新編譯,直接下載更新好的
i686: i386的一個子集,支援的cpu從Pentium 2 (686)開始,之前的型號不支援.
i386: 適用於intel和AMD所有32位元的cpu.以及via採用X86架構的32的cpu.
intel平台包括8086,80286,80386,80486,奔騰系列(1.2.3.4)、賽揚系列,Pentium D系列以及centrino P-M,core duo 等.
X86_64: 適用於intel的Core 2 Duo, Centrino Core 2 Duo, and Xeon 和AMD Athlon64/x2, Sempron64/x2, Duron64等採用X86架構的64位元cpu.
wget http://llvm.org/releases/4.0.1/clang+llvm-4.0.1-x86_64-linux-gnu-Fedora-25.tar.xz
xz -d clang+llvm-4.0.1-x86_64-linux-gnu-Fedora-25.tar.xz
tar xvf clang+llvm-4.0.1-x86_64-linux-gnu-Fedora-25.tar
cd clang+llvm-4.0.1-x86_64-linux-gnu-Fedora-25
x64:
wget http://llvm.org/releases/3.5.1/clang+llvm-3.5.1-x86_64-fedora20.tar.xz
xz -d clang+llvm-3.5.1-x86_64-fedora20.tar.xz
tar xvf clang+llvm-3.5.1-x86_64-fedora20.tar
cd clang+llvm-3.5.1-x86_64-fedora20
x86:
wget http://llvm.org/releases/3.5.1/clang+llvm-3.5.1-i686-fedora20.tar.xz
xz -d clang+llvm-3.5.1-i686-fedora20.tar.xz
tar xvf clang+llvm-3.5.1-i686-fedora20.tar
cd clang+llvm-3.5.1-i686-fedora20
以上兩種應該都可以,反正都是編譯好了的就行了。這裡我保守用了3.5.1版本的。檔案小點 100多M 4.0.1 700多M
root許可權下
mkdir /usr/clang_351
cp -r /learn/clang+llvm-3.5.1-x86_64-fedora2/bin /usr/clang_351
cp -r /learn/clang+llvm-3.5.1-x86_64-fedora2/lib /usr/clang_351 ;libclang.so 在該目錄中,後面編譯ycm時需要
cp -r /learn/clang+llvm-3.5.1-x86_64-fedora2/lib /usr/clang_351 ;生成ycm_core需要
kk4728許可權:
vi ~/.bash_profile 新增
PATH=/usr/clang_351/bin:$PATH
export PATH
source ~/.bash_profile更新
13 安裝YouCompleteMe
cp /usr/clang_3_5/lib/libclang.so ~/.vim/bundle/YouCompleteMe/python/libclang.so
cd ~
mkdir build
cd build
cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=/usr/clang_351/ . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
提示:編譯器不支援 C++11
Your C++ compiler does NOT fully support C++11.
於是 find /usr -name "gcc" 發現 /usr/bin/gcc版本仍為4.4.7 從而備份/usr/bin/gcc 再試
由於之前安裝gcc-6.3.0時沒有移除之前 4.4.7版本
所以 sudo yum remove gcc
sudo yum remove g++
sudo yum remove gcc-c++
cp /usr/local/bin/gcc /usr/bin/gcc
在build目錄下刪除 之前安裝失敗的中間檔案 rm -rf *
//這裡需要注意的是,~/ycm_temp/llvm_root_dir中包含的是根據第一步下載的壓縮包解壓出來的內容(包括include, bin等等檔案)。
//中途出現錯誤 clang-c/Index.h找不到 就是PATH_TO_LLVM_ROOT路徑設定錯誤!
rm -rf CMakeCache.txt //防止中途編譯異常帶來的問題
make ycm_core
編譯出現問題:可能與編譯器版本有關 gcc6.3.0 可能太新了 -> 後查極有可能時clang3.5.1偏舊 改成 4.0.1可能能解決
--> 再 make ycm_core
cp /usr/clang_351/lib/libclang.so ~/.vim/bundle/YouCompleteMe/python/libclang.so 貌似不會出錯
[ 72%] Building CXX object ycm/CMakeFiles/ycm_core.dir/ClangCompleter/TranslationUnit.cpp.o
/home/kk4728/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/ClangCompleter/TranslationUnit.cpp 在函數‘unsigned int YouCompleteMe::{匿名}::EditingOptions()’中:
/home/kk4728/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/ClangCompleter/TranslationUnit.cpp:43:10: 錯誤:‘CXTranslationUnit_CreatePreambleOnFirstParse’在此作用域中尚未宣告
CXTranslationUnit_CreatePreambleOnFirstParse |
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/kk4728/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/ClangCompleter/TranslationUnit.cpp:44:10: 錯誤:‘CXTranslationUnit_KeepGoing’在此作用域中尚未宣告
CXTranslationUnit_KeepGoing |
^~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/kk4728/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/ClangCompleter/TranslationUnit.cpp 在建構函式‘YouCompleteMe::TranslationUnit::TranslationUnit(const string&, const std::vector<UnsavedFile>&, const std::vector<std::__cxx11::basic_string<char> >&, CXIndex)’中:
/home/kk4728/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/ClangCompleter/TranslationUnit.cpp:105:51: 錯誤:‘clang_parseTranslationUnit2FullArgv’在此作用域中尚未宣告
&clang_translation_unit_ );
^
make[3]: *** [ycm/CMakeFiles/ycm_core.dir/ClangCompleter/TranslationUnit.cpp.o] 錯誤 1
make[2]: *** [ycm/CMakeFiles/ycm_core.dir/all] 錯誤 2
make[1]: *** [ycm/CMakeFiles/ycm_core.dir/rule] 錯誤 2
make ycm_support_libs x64中失敗!
//暫時越過 make ycm_make 和make ycm_support_libs
直接進入到YCM安裝目錄
./install.sh --clang-completer
在x64中執行正常,在x86中出現clang.5.0版本庫異常,無法自動下載。
14 vimrc
let g:ycm_global_ycm_extra_conf=‘~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py‘
檢查設定
echo | clang -std=c++11 -stdlib=libc++ -v -E -x c++ -
上述.ycm_extra_conf.py中新增c庫支援
'-isystem',
'/usr/include',
'-isystem',
'/usr/local/include',
'-isystem',
'/usr/clang_3_5/bin/../include/c++/v1',
'-isystem',
'/usr/clang_3_5/bin/../lib/clang/3.5.1/include',
安裝 man
yum install man
yum install man-pages.noarch man-pages-overrides.noarch
將en下的man複製過來,先湊合用用:
cp /usr/share/locale/en/LC_MESSAGES/man /usr/share/locale/zh/LC_MESSAGES/
整個vimrc設定如下
"""""""""""""""""""""""""""""""""""""""""""
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'gmarik/Vundle.vim'
" My Plugins here:"
Plugin 'bling/vim-airline'
"let g:airline_powerline_fonts = 1"
set laststatus=2
set t_Co=256
Plugin 'scrooloose/nerdtree'
let mapleader=","
nmap <silent> <leader>ne :NERDTree<CR>
nmap <silent> <leader>nc :NERDTreeClose<CR>
"map <silent> <F3> :NERDTreeToggle<CR>"
Plugin 'kien/ctrlp.vim'
"Plugin 'altercation/vim-colors-solarized'"
let g:ctrlp_custom_ignore = {
'dir': 'vendor/bundle/*|vendor/cache/*|public|spec',
'file': 'v.(exe|so|dll|swp|log|jpg|png|json)$',
}
syntax enable
set background=dark
let g:solarized_termcolors=256
" colorscheme flatcolor
Plugin 'taglist.vim'
let Tlist_Show_One_File = 1 "不同時顯示多個檔案的tag,只顯示當前檔案的"
let Tlist_Exit_OnlyWindow = 1 "如果taglist視窗是最後一個視窗,則退出vim"
"let Tlist_Use_Right_Window = 1" "在右側視窗中顯示taglist視窗"
"nmap <F4> :TlistToggle<cr>"
Plugin 'Valloric/YouCompleteMe'
Plugin 'rdnetto/YCM-Generator'
let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'
let g:ycm_confirm_extra_conf = 0
nnoremap <leader>gl :YcmCompleter GoToDeclaration<CR>
nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>
inoremap <c-o> <c-x><c-o>
let g:ycm_semantic_triggers = {
'c' : ['->', ' ', '.', ' ', '(', '[', '&'],
'cpp,objcpp' : ['->', '.', ' ', '(', '[', '&', '::'],
'perl' : ['->', '::', ' '],
'php' : ['->', '::', '.'],
'cs,java,javascript,d,vim,python,perl6,scala,vb,elixir,go' : ['.'],
'ruby' : ['.', '::'],
'lua' : ['.', ':']
}
Plugin 'winmanager'
let g:winManagerWindowLayout="NERDTree|TagList"
let g:NERDTree_title="[NERDTree]"
function! NERDTree_Start()
exec 'NERDTree'
endfunction
function! NERDTree_IsValid()
return 1
endfunction
nmap <silent> <F2> :if IsWinManagerVisible() <BAR> WMToggle<CR> <BAR> else <BAR> WMToggle<CR>:q<CR> endif <CR><CR>
" All of your Plugins must be added before the following line"
call vundle#end() " required"
filetype plugin indent on " required"
set nu "show line number"
set ts=4 "tab length is 4"
autocmd FileType * setlocal formatoptions-=c formatoptions-=r formatoptions-=o
set list listchars=tab:→ ,trail:·
set hlsearch incsearch smartcase ignorecase
autocmd BufNewFile,BufRead *.json set filetype=javascript
nmap mm :call ChangeMouse()<cr>
function ChangeMouse()
if &mouse == "a"
set mouse-=a
else
let &mouse = "a"
endif
endfunction
set nocompatible
set autoindent
set backspace=indent,eol,start
set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
set encoding=utf-8
set fileencodings=ucs-bom,utf-8,cp936
set fileencoding=utf-8
安裝 TMUX
yum install automake
yum install libevent-devel ncurses-devel
安裝TMUX錯誤:‘EVBUFFER_EOL_LF’未宣告 ----未嘗試!!!!!!!!!!
原因是使用的libevent的版本太低造成的,要求libevent>= 2.0.10-stable
wget –no-check-certificate https://sourceforge.net/projects/levent/files/libevent/libevent-2.0/libevent-2.0.22-stable.tar.gz
按照 http://www.linuxidc.com/Linux/2017-10/147826.htm
成功安裝
15 清理
clang 編譯好了之後,不用安裝,僅僅為了得到libclang.so 已經複製到 /usr/clang_351中
python2.7 也是臨時的,作為clang的依賴 不需要安裝什麼第三方庫
gcc 也可以是臨時的, 用來編譯clang, 還可以得到libstdc++.so
清理後空間不怎麼減少!!!!!!!!!!!!!!!!!!!
本文永久更新連結地址:http://www.linuxidc.com/Linux/2017-10/147825.htm
相關文章