python - 构建 YouCompleteMe 时出现 Libpython 错误

标签 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 版本。是否引起问题?

最佳答案

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

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

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

请注意,即使您使用的是 pyenv,YouCompleteMe build 也可能指向一个不需要的 python 构建,因为它们现在没有被正确地自动检测到。

如果您遇到此问题,您可能还应该正确指定 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=(我假设您的 header 在该路径中,请先检查一下)

关于python - 构建 YouCompleteMe 时出现 Libpython 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22990769/

相关文章:

c++ - 我可以指定我的可执行文件链接到一个或其他库吗? libhello.so 还是 libhellod.so?

python - 脚本即使在异步运行时也执行得非常慢

vim - 为什么 ci` 跳到反引号中而 ci( 不跳到大括号中?

C++在linux平台运行时加载共享库和提取类实现

c++ - 仅在当前目录中搜索标签

vim - 使用 Nix 中的预定义插件列表构建 vim

c - 跨进程共享库

python - 在 Django 中验证上传的文件

python - 以最 Pythonic 的方式替换字符串的第一个和最后一个单词

python - Google Cloud - 收到无效的 JSON 负载。未知名称 "encoding"at 'config' : Proto field is not repeating, 无法启动列表