2014-04-10 27 views
7

Tôi đang xây dựng YouCompleteMe plugin của vim, theo sau document này. Khi tôi chạy make tôi nhận được lỗi sau.Lỗi Libpython khi xây dựng YouCompleteMe

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 

Lỗi này là gì?
Tôi đã cài đặt pyenv để quản lý các phiên bản python. Nó có gây ra vấn đề không?

+0

Cố gắng biên dịch nó bằng '-fPIC'. Bạn cũng nên có python 2,7 thư viện có sẵn. – bosnjak

+0

@Lawrence đã cố gắng biên dịch bằng '-fPIC' nó không hoạt động, cùng một lỗi. –

Trả lời

6

Làm cho trình liên kết trỏ tới tệp .so (đối tượng được chia sẻ) chứ không phải tệp .a (static lib).

Bạn có thể làm điều này xác định cờ khi chạy cmake:

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

Đỗ nhớ rằng ngay cả khi bạn đang sử dụng pyenv, YouCompleteMe xây dựng có thể trỏ đến một không mong muốn python xây dựng vì họ là không chính xác auto được phát hiện ngay bây giờ.

Nếu bạn đang gặp vấn đề này, bạn nên có lẽ cũng chỉ định các tập tin tiêu đề Python một cách chính xác:

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

PS = (Tôi giả định tiêu đề của bạn đang trên đường đi mà, đừng kiểm tra trước đó)

6

Kể từ khi một số đường dẫn là khác nhau trên hệ thống của tôi từ câu trả lời được chấp nhận (cả CMake và những lib python) tôi đăng một giải pháp thay thế cho vấn đề trên:

  1. Make chắc chắn có một phiên bản thư viện chia sẻ của libpython2.7.so

    $ locate libpython 
    /usr/lib/x86_64-linux-gnu/libpython2.7.so.1 
    
  2. Hoặc tạo ra một liên kết tượng trưng đến nó từ nơi CMake hy vọng nó được

    sudo ln -s "/usr/lib/x86_64-linux-gnu/libpython2.7.so.1" "/usr/lib/libpython2.7.so" 
    

    hoặc cách khác, như được viết trong YCM's build script code, bạn có thể thêm tùy chọn CMake thêm để đảm bảo thư viện .so là đúng tìm thấy

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

Đã xảy ra lỗi khi cố gắng biên dịch YCM, việc liên kết thư viện chia sẻ không hoạt động đối với tôi, nhưng xuất các tùy chọn CMake đã làm, cảm ơn :-) – Eddy

+1

Tôi gặp lỗi này khi biên dịch Caffet trên máy chủ Ubuntu của mình. Tạo một liên kết tượng trưng đã giải quyết được vấn đề của tôi. Cảm ơn! – BajajG

Các vấn đề liên quan