web-dev-qa-db-ja.com

'_Py_NotImplementedStruct'に対する再配置R_X86_64_32Sは、共有オブジェクトを作成するときに使用できません。 -fPICで再コンパイルします

dlib Pythonライブラリをインストールしようとしています。一部のシステム(macOS、ストックUbuntu 14.04)ではpip install dlibは正常に動作しますが、CircleCI環境の一部であるUbuntu 14.xでは、次のエラーで失敗します。

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!

何が悪いのでしょうか?

13
domkck

問題は、dlibインストールを成功させるにはPythonを--enable-sharedフラグでコンパイルする必要があることでした。場合によってはシステムPythonはこのフラグ(Ubuntuなど)でビルドされます。CI環境で使用していたフラグはpyenvを介してインストールされ、デフォルトでは設定されません。

解決策は、次のようにフラグを設定してpyenv-provided Pythonを再インストールすることでした。

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

これを確実に使用するには:machine: python: version: 2.7.11 # Has to match the pyenv-installed version

14
domkck

参考までに、私の特定のケースは、「/ usr/local/lib /libpython2.7.a」の名前を「/usr/local/lib/libpython2.7.a.moved」に変更することで解決されました。 'yum whatprovides /usr/local/lib/libpython2.7.a'の出力によると、これはyumを介してインストールされたパッケージの一部としてインストールされていません。この場合、これを邪魔にならないように移動して、私の問題を解決しました。

これが私の元のエラーメッセージでした:

  /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:シンボルの追加エラー:不正な値collect2:エラー:ldが1つの終了ステータスを返しました

インストールされたパッケージのいずれも.alibを考慮していなかったことを考えると、それを脇に移動することは私にとっての選択肢でした。

1
Wally

Amazondockerコンテナー内でawslambda python 3.6 Amazon-linux-python-)のmatplotlibscikit-imageの依存関係)をビルドするときに同様の問題が発生しました3.6

つまり、matplotlibはOPが/usr/lib/libpython3.6m.aに対して持っていたのと同じエラーを出していました。 Amazondockerコンテナにはそのようなライブラリが2つあることが判明しました。

find / -name "libpython3.6m.a"
/usr/lib/libpython3.6m.a
/usr/lib/python3.6/config-3.6m-x86_64-linux-gnu/libpython3.6m.a

そこで、/usr/lib/libpython3.6m.aの名前を別の名前に変更して、matplotlibが使用しないようにし、2番目のオプションを選択しました。

enter code heremv /usr/lib/libpython3.6m.a /usr/lib/libpython3.6m.a.moved

この変更後、scikit-imagepip3 install --no-binary scikit-image scikit-imageを使用して成功しました。

0
Marcin