我正在使用YouCompleteMe Vim 插件来完成文本(通过Vundle 安装)。 YouCompleteMe 使用 Clang 来完成 C 系列语言(C、C++、Objective-C、Objective-C++)的文本完成。但是,在 YouCompleteMe 更新后(通过 Vim 中的 :VundleUpdate)YouCompleteMe 停止工作。
简而言之,问题是:如何针对自定义 glibc 版本编译 Clang? Debian Wheezy 附带 glibc 2.13,似乎最新的 Clang 版本至少需要 glibc 2.15(解释在下面有更多详细信息)。以防万一,我使用的是 Debian Wheezy、x86-64 和自定义 Linux 内核版本 4.0.0-rc6。
于是我按照LLVM website上的说明从git镜像下载了LLVM:
$ mkdir ~/代码
$ cd ~/code/llvm_source_tree
$ git clone http://llvm.org/git/llvm.git
$ cd ~/code/llvm_source_tree/llvm/tools
$ git clone http://llvm.org/git/clang.git
$ cd ~/code/llvm_source_tree/llvm/projects
$ git clone http://llvm.org/git/compiler-rt.git
$ git clone http://llvm.org/git/test-suite.git
$ cd ~/code/llvm_source_tree/llvm
$ git config branch.master.rebase true
然后,我按照LLVM website 上的说明编译了 LLVM:
$ cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE='Release' ~/code/llvm_source_tree/llvm/
$ 使-j 5
$苏
# 进行安装
到目前为止一切都很好,所以我通过编译 YouCompleteMe install instructions 之后的 YouCompleteMe 支持库来继续安装 YouCompleteMe:
$ mkdir ~/ycm_build
$ cd ~/ycm_build
$ cmake -G "Unix Makefiles" -DEXTERNAL_LIBCLANG_PATH=/usr/local/lib/libclang.so 。 ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
$ 制作 ycm_support_libs
然后我运行 Vim,我注意到 YouCompleteMe 似乎仍然无法正常工作。当我在 Vim 中的某个 C++ 文件(例如)中进入编辑模式时,YouCompleteMe 打印错误:The ycmd server SHUT DOWN (restart with :YcmRestartServer). Stderr (last 30 lines):,然后:YcmRestartServer 打印Restarting ycmd server...,然后是('Connection aborted.', error(111, 'Connection refused')))。
:YcmDebugInfo 打印以下内容:
正在打印 YouCompleteMe 调试信息...
-- 服务器崩溃,没有来自服务器的调试信息
-- 服务器运行在:http://127.0.0.1:37730
-- 服务器进程 ID:22358
-- 服务器日志文件:
-- /tmp/ycm_temp/server_37730_stdout.log
-- /tmp/ycm_temp/server_37730_stderr.log
/tmp/ycm_temp/server_37730_stdout.log 为空,但/tmp/ycm_temp/server_37730_stderr.log 包含以下行:
2015-05-20 17:06:46,126 - 调试 - 没有全局额外配置,不调用方法 YcmCorePreload
回溯(最近一次通话最后):
_run_module_as_main 中的文件“/usr/lib/python2.7/runpy.py”,第 162 行
"__main__", fname, 加载器, pkg_name)
_run_code 中的文件“/usr/lib/python2.7/runpy.py”,第 72 行
run_globals 中的执行代码
文件“/home/user/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/__main__.py”,第 164 行,在
主要的()
文件“/home/user/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/__main__.py”,第 150 行,在 Main
从 ycmd 导入处理程序
文件“/home/user/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/../ycmd/handlers.py”,第 30 行,在
str(e)))
RuntimeError:导入 ycm_core 时出错。你确定你已经在文件夹“/home/user/.vim/bundle/YouCompleteMe/third_party/ycmd”中放置了3.2+版本的libclang.[so|dll|dylib]?请参阅文档中的安装指南。完全错误:/lib/x86_64-linux-gnu/libc.so.6:找不到版本“GLIBC_2.14”(/home/user/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/../ 需要libclang.so)
所以我运行了 YouCompleteMe 的测试,在运行./vim/bundle/YouCompleteMe/third_party/ycmd/run_tests.sh 时遇到了这个错误:
[ 98%] 构建 CXX 对象 ycm/tests/CMakeFiles/ycm_core_tests.dir/main.cpp.o
[100%] 构建 CXX 对象 ycm/tests/CMakeFiles/ycm_core_tests.dir/TestUtils.cpp.o
链接 CXX 可执行文件 ycm_core_tests
../../clang+llvm-3.6.0-x86_64-linux-gnu/lib/libclang.so:未定义对“posix_spawn@GLIBC_2.15”的引用
../../clang+llvm-3.6.0-x86_64-linux-gnu/lib/libclang.so:未定义对“memcpy@GLIBC_2.14”的引用
collect2:错误:ld 返回 1 个退出状态
make[3]: *** [ycm/tests/ycm_core_tests] 错误 1
make[2]: *** [ycm/tests/CMakeFiles/ycm_core_tests.dir/all] 错误 2
make[1]: *** [ycm/tests/CMakeFiles/ycm_core_tests.dir/rule] 错误 2
make: *** [ycm_core_tests] 错误 2
回溯(最近一次通话最后):
文件“/home/user/.vim/bundle/YouCompleteMe/third_party/ycmd/build.py”,第 196 行,在
主要的()
文件“/home/user/.vim/bundle/YouCompleteMe/third_party/ycmd/build.py”,第 189 行,在 Main
BuildYcmdLibs(GetCmakeArgs(args))
BuildYcmdLibs 中的文件“/home/user/.vim/bundle/YouCompleteMe/third_party/ycmd/build.py”,第 152 行
_err = sys.stderr )
__call__ 中的文件“/home/user/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/sh/sh.py”,第 1021 行
返回运行命令(cmd,call_args,标准输入,标准输出,标准错误)
文件“/home/user/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/sh/sh.py”,第 486 行,在 __init__
自我等待()
文件“/home/user/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/sh/sh.py”,第500行,等待
self.handle_command_exit_code(exit_code)
文件“/home/user/.vim/bundle/YouCompleteMe/third_party/ycmd/third_party/sh/sh.py”,第516行,在handle_command_exit_code中
提高 exc(self.ran,self.process.stdout,self.process.stderr)
sh.ErrorReturnCode_2:
跑:'/usr/bin/make -j 8 ycm_core_tests'
标准输出:
标准错误:
看来 Clang 3.6.0 可能需要 glibc 2.15 或更高版本。 Debian Wheezy 附带 glibc 2.13。于是决定安装最新的稳定版glibc(目前是2.21)。我之前已经编译了binutils并安装到/usr/local/bin/,所以我现在不需要这样做。
于是我下载了http://ftp.gnu.org/gnu/glibc/glibc-2.21.tar.bz2,然后解压并编译源码并安装:
$ cd ~/代码
$ mkdir ~/code/glibc
$ cd ~/code/glibc
$ mv -iv ~/downloads/glibc-2.21.tar.bz2 。
$ tar xjvf glibc-2.21.tar.bz2
$ cd glibc-2.21
$ mkdir 构建
$ cd 构建
$ ../configure --with-binutils=/usr/local/bin --prefix=/usr/local/glibc/glibc-2.21
$ 使-j 5
$苏
# 进行安装
然后我重新编译了 LLVM。我将CMAKE_CXX_FLAGS 环境变量中的g++ 链接器标志传递给cmake,遵循Employed Russian 对SO 问题Multiple glibc libraries on a single host 的回答:
$ export CMAKE_CXX_FLAGS='-Wl,--rpath=/usr/local/glibc/glibc-2.21 -Wl,--dynamic-linker=/usr/local/glibc/glibc-2.21/ld-linux.so.2'
$ cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE='Release' ~/code/llvm_source_tree/llvm/
$ 使-j 5
然后我重新编译了 YouCompleteMe 支持库,再次将 g++ 链接器标志传递给 cmake in CMAKE_CXX_FLAGS:
$ export CMAKE_CXX_FLAGS='-Wl,--rpath=/usr/local/glibc/glibc-2.21 -Wl,--dynamic-linker=/usr/local/glibc/glibc-2.21/ld-linux.so.2'
$ cmake -G "Unix Makefiles" -DEXTERNAL_LIBCLANG_PATH=/usr/local/lib/libclang.so 。 ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
但是 YouCompleteMe 的问题仍然存在,并且测试仍然以同样的方式失败。也许CMAKE_CXX_FLAGS 不足以将 g++ 链接器标志传递给cmake?在针对 glibc 2.21 编译 LLVM 时,我还尝试使用 LD_LIBRARY_PATH:
$ cd ~/code/llvm_source_tree
$ mkdir build2
$ cd build2
$ export LD_LIBRARY_PATH="/usr/local/glibc/glibc-2.21/lib:$LD_LIBRARY_PATH"
$ cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE='Release' ~/code/llvm_source_tree/llvm/
得到了这个错误:
cmake:加载共享库时出错:__vdso_time:dlopen()的无效模式:无效参数
那我也试了LD_PRELOAD:
$ export LD_PRELOAD='/usr/local/glibc/glibc-2.21/lib/ld-linux-x86-64.so.2 /usr/local/glibc/glibc-2.21/lib/libc.so.6'
$ export LD_LIBRARY_PATH="/usr/local/glibc/glibc-2.21/lib:$LD_LIBRARY_PATH"
$ cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE='Release' ~/code/llvm_source_tree/llvm/
得到了这些错误:
-- C 编译器标识未知
-- CXX 编译器标识未知
ld.so 检测到的不一致:dl-minimal.c: 136: realloc: Assertion `ptr == alloc_last_block' 失败!
然后我也尝试将/usr/local/glibc/glibc-2.21/lib/ld-2.21.so添加到export LD_PRELOAD,但它并没有以任何方式改变错误消息。
我很确定 Clang 不需要 glibc 2.15(精确),即使另一个缺失的符号 (posix_spawn@GLIBC_2.15) 最初来自 glibc 2.15,因为 glibc 根据其文档试图保持向后兼容性,无论如何其他缺少符号 (memcpy@GLIBC_2.14) 来自 glibc 2.14。所以我没有用 glibc 2.15 尝试这一切。但现在我没有想法,任何建议都将不胜感激。
编辑 1
我关注了Employed Russian's answer (below),但我的问题没有任何改变。所以我得出结论,export CMAKE_CXX_FLAGS 不是将 g++ 链接器标志传递给cmake 的正确方法。 CMAKE_CXX_FLAGS 是变量 internal 到 cmake 的名称,但 cmake 根本不关心具有相同名称的 环境 变量 (CMAKE_CXX_FLAGS )。 CMAKE_CXX_FLAGS 可以直接在 CMakeLists.txt 中定义,但在 LLVM compiling instructions 中没有使用主 CMakeLists.txt,如果有更实用的选项,我不想从头开始重新创建 LLVM 编译脚本。但我仍然可以找到 3 个其他选项:
-
cmake 从名为 CXXFLAGS 的环境变量中初始化 CMAKE_CXX_FLAGS。请参阅 sakra 对 SO 问题 Adding include directories to cmake when calling it from command line 的回答。
$ export CXXFLAGS='-Wl,--rpath=/usr/local/glibc/glibc-2.21 -Wl,--dynamic-linker=/usr/local/glibc/glibc-2.21/ld-linux-x86-64。所以.2'
$ cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE='Release' ~/code/llvm_source_tree/llvm/
$ 制作
-
CMAKE_CXX_FLAGS 也可以使用-DCMAKE_CXX_FLAGS 从命令行初始化:
$ cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE='Release' -DCMAKE_CXX_FLAGS='-Wl,--rpath=/usr/local/glibc/glibc-2.21 -Wl,--dynamic-linker=/usr/local/glibc /glibc-2.21/ld-linux-x86-64.so.2' ~/code/llvm_source_tree/llvm/
$ 制作
-
CMAKE_CXX_FLAGS 也可以使用-DCMAKE_CXX_FLAGS:STRING 从命令行初始化(参见Building mpllibs):
$ cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE='Release' -DCMAKE_CXX_FLAGS:STRING='-Wl,--rpath=/usr/local/glibc/glibc-2.21 -Wl,--dynamic-linker=/usr/local /glibc/glibc-2.21/ld-linux-x86-64.so.2' ~/code/llvm_source_tree/llvm/
$ 制作
所有这 3 个选项产生完全相同的结果:编译 LLVM 以与目标 llvm-tblgen 和 intrinsics_gen 相关的相同错误结束(@987654376 上面产生的 3 个 Makefile 之间的唯一区别@ 命令位于目录名称中,这是由于每个构建都是在不同的目录中完成的)。似乎目标llvm-tblgen 被适当地编译和链接,但之后目标llvm-tblgen 似乎是目标intrinsics_gen 的依赖项,并且不知何故找不到llvm-tblgen。这些是make 输出的最后几行(对于上面的 3 个构建中的每一个都是相同的):
链接 CXX 可执行文件 ../../bin/llvm-tblgen
[ 4%] 构建目标 llvm-tblgen
扫描目标 intrinsics_gen 的依赖关系
[ 4%] Building Intrinsics.gen...
/bin/sh:1:../../../bin/llvm-tblgen:未找到
make[2]: *** [include/llvm/IR/Intrinsics.gen.tmp] 错误 127
make[1]: *** [include/llvm/IR/CMakeFiles/intrinsics_gen.dir/all] 错误 2
make: *** [全部] 错误 2
我想知道这是否是 LLVM 中的错误,或者设置 cmake 变量 CMAKE_CXX_FLAGS 的方式(在上面的 3 个构建中)是否足够,或者这是由其他原因引起的。任何如何继续的想法将不胜感激。
编辑 2
正如 Employed Russian 在他的评论 (below his answer) 中所建议的那样:
$ export CXXFLAGS='-Wl,--rpath=/usr/local/glibc/glibc-2.21 -Wl,--dynamic-linker=/usr/local/glibc/glibc-2.21/lib/ld-linux-x86- 64.so.2'
$ cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE='Release' ~/code/llvm_source_tree/llvm/
$ 制作
这也导致了与目标llvm-tblgen和intrinsics_gen相关的编译错误,但与之前的错误相比,该错误有所不同。这些是make 输出的最后几行:
链接 CXX 可执行文件 ../../bin/llvm-tblgen
[ 4%] 构建目标 llvm-tblgen
扫描目标 intrinsics_gen 的依赖关系
[ 4%] Building Intrinsics.gen...
../../../bin/llvm-tblgen:加载共享库时出错:libtinfo.so.5:无法打开共享对象文件:没有这样的文件或目录
make[2]: *** [include/llvm/IR/Intrinsics.gen.tmp] 错误 127
make[1]: *** [include/llvm/IR/CMakeFiles/intrinsics_gen.dir/all] 错误 2
make: *** [全部] 错误 2
所以现在似乎找到了llvm-tblgen,但是加载共享库libtinfo.so.5 时出错。于是我把--rpath=/usr/local/glibc/glibc-2.21改成了--rpath=/usr/local/glibc/glibc-2.21/lib,又试了一次:
$ export CXXFLAGS='-Wl,--rpath=/usr/local/glibc/glibc-2.21/lib -Wl,--dynamic-linker=/usr/local/glibc/glibc-2.21/lib/ld-linux- x86-64.so.2'
$ cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE='Release' ~/code/llvm_source_tree/llvm/
$ 制作
但是,--rpath 的这种更改根本没有改变make 产生的错误消息。我想知道这个共享库libtinfo.so.5 应该放在哪里。
然后我遇到Building the Clang + LLVM compilers website 并尝试将-std=c++11 添加到CXXFLAGS:
$ export CXXFLAGS='-std=c++11 -Wl,--rpath=/usr/local/glibc/glibc-2.21 -Wl,--dynamic-linker=/usr/local/glibc/glibc-2.21/lib /ld-linux-x86-64.so.2'
$ cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE='Release' ~/code/llvm_source_tree/llvm/
$ 制作
但是没有用,报错信息是一样的,就是仍然找不到共享库libtinfo.so.5。也许我的g++ 版本太旧了,它是Debian Wheezy 附带的g++ 4.7.2(g++ --version 打印g++ (Debian 4.7.2-5) 4.7.2)。 Building the Clang + LLVM compilers website 的作者写道,他尝试仅使用 g++ 4.7.1 在 Fedora 15 上构建 LLVM 失败,而最终使用不同的 g++ 版本(4.8、4.8.0、4.7.1)重新启动了几次成功(在网站上描述)。有什么想法吗?
编辑 3
按照 Employed Russian 的建议,我用 -Wl,--rpath=/usr/local/glibc/glibc-2.21/lib:/lib:/usr/lib:/lib/x86_64-linux-gnu 重新编译了 glibc 2.21:
$ cd ~/code/glibc/glibc-2.21
$ mv -iv 构建 old_build
$ mkdir 构建
$ cd 构建
$ export LD_FLAGS='-Wl,--rpath=/usr/local/glibc/glibc-2.21/lib:/lib:/usr/lib:/lib/x86_64-linux-gnu'
$ ../configure --with-binutils=/usr/local/bin --prefix=/usr/local/glibc/glibc-2.21
$ 使-j 5
make check 产生了一些错误:
测试结果总结:
112 失败
2073 通过
第199章
3 XPASS
make[1]: *** [测试] 错误 1
make[1]: 离开目录`/home/user/code/glibc/glibc-2.21'
make: *** [检查] 错误 2
反正我安装的是新编译的glibc 2.21:
$苏
# 进行安装
make install 产生了这个警告:
/home/user/code/glibc/glibc-2.21/build/elf/ldconfig:警告:忽略无法打开的配置文件:/usr/local/glibc/glibc-2.21/etc/ld.so.conf:没有这个文件或目录
make[1]: 离开目录`/home/user/code/glibc/glibc-2.21'
然后我再次重新编译 LLVM:-Wl,--rpath=/usr/local/glibc/glibc-2.21/lib:/lib:/usr/lib:/lib/x86_64-linux-gnu:
$ export CXXFLAGS='-std=c++11 -Wl,--rpath=/usr/local/glibc/glibc-2.21/lib:/lib:/usr/lib:/lib/x86_64-linux-gnu -Wl ,--动态链接器=/usr/local/glibc/glibc-2.21/lib/ld-linux-x86-64.so.2'
$ cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE='Release' ~/code/llvm_source_tree/llvm/
$ 制作
但是libstdc++.so.6 不见了:
链接 CXX 可执行文件 ../../bin/llvm-tblgen
[ 4%] 构建目标 llvm-tblgen
扫描目标 intrinsics_gen 的依赖关系
[ 4%] Building Intrinsics.gen...
../../../bin/llvm-tblgen:加载共享库时出错:libstdc++.so.6:无法打开共享对象文件:没有这样的文件或目录
make[2]: *** [include/llvm/IR/Intrinsics.gen.tmp] 错误 127
make[1]: *** [include/llvm/IR/CMakeFiles/intrinsics_gen.dir/all] 错误 2
make: *** [全部] 错误 2
所以我得出结论,--rpath 肯定还需要一些其他库目录。
$ 光盘 /usr
$ 须藤找到。 -name 'libstdc++.so.6'
./lib32/debug/libstdc++.so.6
./lib32/libstdc++.so.6
./lib/x86_64-linux-gnu/debug/libstdc++.so.6
./lib/x86_64-linux-gnu/libstdc++.so.6
./lib/git-annex.linux/usr/lib/x86_64-linux-gnu/libstdc++.so.6
./lib/i386-linux-gnu/libstdc++.so.6
其中,./lib/x86_64-linux-gnu/libstdc++.so.6 看起来最适合我。于是我在--rpath中添加了/usr/lib/x86_64-linux-gnu,并再次重新编译了glibc 2.21:
$ cd ~/code/glibc/glibc-2.21
$ mv -iv 构建 old_build2
$ mkdir 构建
$ cd 构建
$ export LD_FLAGS='-Wl,--rpath=/usr/local/glibc/glibc-2.21/lib:/lib:/usr/lib:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux -gnu'
$ ../configure --with-binutils=/usr/local/bin --prefix=/usr/local/glibc/glibc-2.21
$ 使-j 5
这次我没有打扰make check,而是直接继续安装:
$苏
# 进行安装
得到了同样看似无害的警告:
/home/user/code/glibc/glibc-2.21/build/elf/ldconfig:警告:忽略无法打开的配置文件:/usr/local/glibc/glibc-2.21/etc/ld.so.conf:没有这个文件或目录
make[1]: 离开目录`/home/user/code/glibc/glibc-2.21'
所以我为 LLVM 添加了 /usr/lib/x86_64-linux-gnu 到 --rpath,并重新编译了 LLVM:
$ export CXXFLAGS='-std=c++11 -Wl,--rpath=/usr/local/glibc/glibc-2.21/lib:/lib:/usr/lib:/lib/x86_64-linux-gnu:/ usr/lib/x86_64-linux-gnu -Wl,--dynamic-linker=/usr/local/glibc/glibc-2.21/lib/ld-linux-x86-64.so.2'
$ cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE='Release' ~/code/llvm_source_tree/llvm/
$ 制作
构建成功,所以我安装了LLVM:
$苏
# 进行安装
然后我用我用于编译 LLVM 的相同 CXXFLAGS 重新编译了 YouCompleteMe 支持库:
$ export CXXFLAGS='-std=c++11 -Wl,--rpath=/usr/local/glibc/glibc-2.21/lib:/lib:/usr/lib:/lib/x86_64-linux-gnu:/ usr/lib/x86_64-linux-gnu -Wl,--dynamic-linker=/usr/local/glibc/glibc-2.21/lib/ld-linux-x86-64.so.2'
$ cmake -G "Unix Makefiles" -DEXTERNAL_LIBCLANG_PATH=/usr/local/lib/libclang.so 。 ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
$ 制作 ycm_support_libs
这个构建也很成功。然后我重新安装了 YouCompleteMe:
$光盘
$ .vim/bundle/YouCompleteMe/install.sh
完成似乎工作。然后我运行了 YouCompleteMe 的测试:
$ .vim/bundle/YouCompleteMe/run_tests.sh
好的,完成仍然有效。
$ .vim/bundle/YouCompleteMe/third_party/ycmd/run_tests.sh
这导致了一个问题。似乎这个.vim/bundle/YouCompleteMe/third_party/ycmd/run_tests.sh 重新编译了支持库——不使用我的Makefile——因此破坏了支持库。解决方案是不运行.vim/bundle/YouCompleteMe/third_party/ycmd/run_tests.sh。
[100%] 构建 CXX 对象 ycm/tests/CMakeFiles/ycm_core_tests.dir/TestUtils.cpp.o
链接 CXX 可执行文件 ycm_core_tests
../../clang+llvm-3.6.0-x86_64-linux-gnu/lib/libclang.so:未定义对“posix_spawn@GLIBC_2.15”的引用
../../clang+llvm-3.6.0-x86_64-linux-gnu/lib/libclang.so:未定义对“memcpy@GLIBC_2.14”的引用
collect2:错误:ld 返回 1 个退出状态
make[3]: *** [ycm/tests/ycm_core_tests] 错误 1
make[2]: *** [ycm/tests/CMakeFiles/ycm_core_tests.dir/all] 错误 2
make[1]: *** [ycm/tests/CMakeFiles/ycm_core_tests.dir/rule] 错误 2
make: *** [ycm_core_tests] 错误 2
所以我以最近的方式重新编译了支持库,之后又重新安装了 YouCompleteMe:
$ export CXXFLAGS='-std=c++11 -Wl,--rpath=/usr/local/glibc/glibc-2.21/lib:/lib:/usr/lib:/lib/x86_64-linux-gnu:/ usr/lib/x86_64-linux-gnu -Wl,--dynamic-linker=/usr/local/glibc/glibc-2.21/lib/ld-linux-x86-64.so.2'
$ cmake -G "Unix Makefiles" -DEXTERNAL_LIBCLANG_PATH=/usr/local/lib/libclang.so 。 ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
$ 制作 ycm_support_libs
$光盘
$ .vim/bundle/YouCompleteMe/install.sh
最后,YouCompleteMe 再次工作!