2017-03-03 9 views
5

Próbuję zainstalować bibliotekę Python dlib. W niektórych systemach (macOS, stock Ubuntu 14.04) pip install dlib działa dobrze, ale w systemie Ubuntu 14.x, który jest częścią naszego środowiska CircleCI, kończy się niepowodzeniem z następującym błędem.Relokacja R_X86_64_32S przeciwko "_Py_NotImplementedStruct" nie może być używana podczas tworzenia obiektu współdzielonego; rekompilacja z -fPIC

Linking CXX shared library dlib.so 
    /usr/bin/ld: /opt/circleci/python/2.7.11/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 
    error: cmake build failed! 

Co może być nie tak?

Odpowiedz

10

Problem polegał na tym, że Python musi zostać skompilowany z flagą --enable-shared dla instalacji dlib, aby odnieść sukces. Podczas gdy w niektórych przypadkach systemowy Python jest zbudowany z tą flagą (np. Na Ubuntu), ten, którego używaliśmy w środowisku CI, został zainstalowany przez pyenv, który nie ustawia go domyślnie.

Rozwiązaniem było ponownie zainstalować pyenv -provided Python z flagą ustawiony tak:

PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install --force 2.7.11

Aby zapewnić ten przyzwyczaja: machine: python: version: 2.7.11 # Has to match the pyenv-installed version

1

Jako FYI, zwłaszcza moja sprawa została rozwiązany przez zmianę nazwy "/usr/local/lib/libpython2.7.a" na "/usr/local/lib/libpython2.7.a.moved". Według wyjścia "yum whatprovides /usr/local/lib/libpython2.7.a" nie zostało to zainstalowane jako część żadnych pakietów zainstalowanych za pośrednictwem yum. Usunięcie tego z drogi w tym przypadku rozwiązało mój problem.

Tu był mój oryginalny komunikat o błędzie:

/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: błąd podczas dodawania symboli: zła jakość collect2: error: ld zwróconym stanu 1 wyjście

Biorąc pod uwagę, że żaden z moich zainstalowanych pakietów nie stanowił biblioteki .a lib, przeniesienie go na bok było dla mnie opcją.

Powiązane problemy