构建YouCompleteMe时出现Libpython错误

时间:2014-04-10 14:19:58

标签: python vim shared-libraries

我正在构建vim的YouCompleteMe插件,遵循此document。当我运行make时,我收到以下错误。

Linking CXX shared library /home/sagar/.vim/bundle/YouCompleteMe/python/ycm_core.so
/usr/bin/ld: /usr/local/lib/libpython2.7.a(abstract.o): relocation R_X86_64_32S against `_Py_NotImplementedStruct' can not be used when making a shared object; recompile with -fPIC
/usr/local/lib/libpython2.7.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status

这是什么错误?
我安装了pyenv来管理python版本。这会引起问题吗?

2 个答案:

答案 0 :(得分:6)

使链接器指向.so(共享对象)文件而不是.a(静态lib)文件。

您可以在运行cmake时指定标志:

cmake -G "Unix Makefiles" -DPYTHON_LIBRARY=/usr/local/lib/libpython2.7.so . ~/.vim/bundle/YouCompleteme/cpp

请注意,即使您正在使用pyenv,YouCompleteMe版本可能会指向不需要的内容 python build,因为它们现在没有被正确地自动检测。

如果您遇到此问题,您可能还应该正确指定Python头文件:

cmake -G "Unix Makefiles" -DPYTHON_LIBRARY=/usr/local/lib/libpython2.7.so -DPYTHON_INCLUDE_DIR=/usr/local/include/python . ~/.vim/bundle/YouCompleteme/cpp

PS =(我假设您的标题在该路径中,请先检查)

答案 1 :(得分:6)

由于我的系统上的某些路径与接受的答案(CMake和python lib)不同,我正在为上述问题发布备用解决方案:

  1. 确保拥有libpython2.7.so

    的共享库版本
    $ locate libpython
    /usr/lib/x86_64-linux-gnu/libpython2.7.so.1
    
  2. 从CMake预期

    创建一个符号链接
    sudo ln -s "/usr/lib/x86_64-linux-gnu/libpython2.7.so.1" "/usr/lib/libpython2.7.so"
    

    或者,如YCM's build script code中所写,您可以添加其他CMake选项以确保正确找到.so库

    export EXTRA_CMAKE_ARGS="-DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython2.7.so.1"