2014-04-10 21 views
7

Sto costruendo il plugin YouCompleteMe di vim, seguendo questo document. Quando corro make ottengo il seguente errore.Errore di libpython durante la creazione di 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 

Qual è l'errore?
Ho installato pyenv per gestire le versioni Python. Sta causando problemi?

+0

Prova a compilarlo con '-fPIC'. Dovresti anche avere le librerie Python 2.7 disponibili. – bosnjak

+0

@Lawrence ha provato a compilare con '-fPIC' non funziona, lo stesso errore. –

risposta

6

Fare in modo che il linker punti al file .so (oggetto condiviso) e non al file .a (static lib).

Si può fare questo specificando il flag durante l'esecuzione cmake:

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

Do mente che anche se si sta utilizzando pyenv, YouCompleteMe accumulo può puntare a un indesiderato accumulo pitone in quanto non sono correttamente automatica rilevato in questo momento.

Se hai questo problema, probabilmente si dovrebbe anche specificare i file di intestazione Python correttamente:

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

PS = (sto assumendo intestazioni sono in questa strada, di controllare prima)

6

Poiché alcuni percorsi erano diverse sul mio sistema dalla risposta accettata (sia il CMake e quelli lib python) sto postando una soluzione alternativa per il problema di cui sopra:

  1. Marchio sicuri di avere una versione della libreria condivisa di libpython2.7.so

    $ locate libpython 
    /usr/lib/x86_64-linux-gnu/libpython2.7.so.1 
    
  2. creare un link simbolico ad esso da dove CMake si aspetta che sia

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

    o, in alternativa, come scritto nel YCM's build script code, è potrebbe aggiungere ulteriori opzioni di CMake per garantire la libreria .so è propriamente trovato

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

Se lo stesso errore cercava di compilare YCM, il collegamento simbolico della libreria condivisa non funzionava per me, ma le opzioni di esportazione CMake lo erano, grazie :-) – Eddy

+1

Ho avuto questo errore durante la compilazione di Caffe sul mio server Ubuntu. La creazione di un collegamento simbolico ha risolto il mio problema. Grazie! – BajajG

Problemi correlati