2014-04-10 20 views
7

Buduję YouCompleteMe wtyczkę vima, po tym document. Po uruchomieniu make pojawia się następujący błąd.Błąd Libpython podczas budowania 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 

Co to jest błąd?
Zainstalowałem pyenv do zarządzania wersjami Pythona. Czy to powoduje problem?

+0

Spróbuj skompiluj go za pomocą '-fPIC'. Powinieneś także mieć dostępne biblioteki Pythona 2.7. – bosnjak

+0

@Lawrence próbował kompilacji z '-fPIC' to nie działa, ten sam błąd. –

Odpowiedz

6

Umieść linker w pliku .so (obiekt udostępniony), a nie w pliku .a (static lib).

Można to zrobić określając flagę podczas uruchamiania cmake:

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

umysł tego zrobić, nawet jeśli używasz pyenv, YouCompleteMe kompilacji mogą wskazywać na niepożądany Pythona kompilacji ponieważ nie są one prawidłowo auto- wykryte teraz.

Jeśli masz ten problem, należy prawdopodobnie także określić pliki nagłówkowe Python poprawnie:

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

PS = (Ja zakładając nagłówki są w tej ścieżce, należy sprawdzić wcześniej)

6

Ponieważ niektóre drogi były różne w moim systemie z przyjętą odpowiedzi (zarówno CUpewnij i pytona lib nich) jestem delegowania alternatywnego rozwiązania powyższego problemu:

  1. Makijażu Upewnij się, że masz wersję biblioteki współdzielonej z libpython2.7.so

    $ locate libpython 
    /usr/lib/x86_64-linux-gnu/libpython2.7.so.1 
    
  2. Albo utworzyć dowiązania do niego, z którego CUpewnij spodziewa się, że będzie

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

    lub alternatywnie, jako napisane w YCM's build script code, ty można dodać dodatkowe opcje cUpewnij celu zapewnienia biblioteki .so jest właściwie znaleźć

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

Gdyby ten sam błąd próbował kompilować YCM, dowiązanie symboliczne do biblioteki współdzielonej nie działało dla mnie, ale eksportowanie opcji CMake sprawiło, że :-) – Eddy

+1

Miałem ten błąd podczas kompilowania Caffe na moim serwerze Ubuntu. Utworzenie dowiązania symbolicznego rozwiązało mój problem. Dzięki! – BajajG

Powiązane problemy