2014-04-10 4 views
7

Ich baue YouCompleteMe Plugin von Vim, nach diesem document. Wenn ich make ausführen, erhalte ich den folgenden Fehler.Libpython-Fehler beim Erstellen von 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 

Was ist dieser Fehler?
Ich habe pyenv installiert, um Python-Versionen zu verwalten. Gibt es ein Problem?

+0

Versuchen kompiliere es mit '-fPIC'. Sie sollten auch Python 2.7-Bibliotheken verfügbar haben. – bosnjak

+0

@Lawrence versucht, mit '-fPIC' zu kompilieren, es funktioniert nicht, der selbe Fehler. –

Antwort

6

Stellen Sie den Linkerpunkt auf die .so-Datei (gemeinsames Objekt) und nicht auf die .a-Datei (statische lib).

Sie können dies unter der Flagge Angabe tun, wenn Cmake ausgeführt wird:

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

Do daran, dass selbst wenn Sie verwenden pyenv, YouCompleteMe Build zu einem unerwünschten Python Build hinweisen, da sie nicht richtig auto- sind jetzt erkannt.

Wenn Sie dieses Problem haben sollten, dann sollten Sie auch angeben, die Header-Python-Dateien korrekt:

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

PS = (Ich gehe davon aus Ihre Header in diesem Pfad sind, bevor Sie überprüfen)

6

Da einige Wege auf meinem System von der akzeptierten Antwort unterschiedlich waren (sowohl die CMake und die python-lib ist) ich eine alternative Lösung für das oben beschriebene Problem bin Entsendung:

  1. Fabrikat sicher, dass eine gemeinsame Bibliothek Version haben libpython2.7.so

    $ locate libpython 
    /usr/lib/x86_64-linux-gnu/libpython2.7.so.1 
    
  2. Entweder einen Symlink, um es von schaffen, in dem CMake erwartet es

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

    oder alternativ zu sein, wie in YCM's build script code geschrieben, Sie könnten zusätzliche CMake Optionen hinzufügen, um die .so-Bibliothek, um sicherzustellen, ist gefunden richtig

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

Hatte den gleichen Fehler versucht, YCM zu kompilieren, Symlinking der gemeinsam genutzten Bibliothek funktionierte nicht für mich, aber exportieren CMake Optionen, danke :-) – Eddy

+1

Ich hatte diesen Fehler beim Kompilieren von Caffe auf meinem Ubuntu-Server. Das Erstellen eines symbolischen Links löste mein Problem. Vielen Dank! – BajajG