2017-05-25 3 views
0

状況を説明しましょう。Anaconda cython-builtモジュールが間違ったGLIBCXXを探しています

システムg ++(under linux)を使ってC++ライブラリをコンパイルしました。 次に、プリコンパイルされたライブラリ内の関数を呼び出すcythonモジュールを構築しました。 cythonモジュールの構築は、anaconada venvの下で行われました(しかし、g ++はvenv内にインストールされていません。したがって、cythonはgcc/g ++システムを使用していたに違いありません)。今、同じアナコンダのvenv下 、とエラーにcythonモジュールの結果をインポートする:システムのG ++でコンパイルされたCライブラリ(libc_rd_halo.soが)今++ライブラリアナコンダgを探しているように思え

anaconda3/envs/hspy/lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./libc_rd_halo.so). 

。そして、私はg ++をanaconda venvにインストールしていません。


私はanaconda g ++を使って最初からcライブラリをコンパイルすることでこの問題を解決できます。 cythonモジュールをもう一度ビルドすると、モジュールをインポートできます。 しかし、私はanaconda cythonにシステムコンパイラを使用させ、モジュールがインポートされているときにシステムコンパイラライブラリを探すようにしたいと思います。

私の質問は以下のとおりです。

  1. はなぜアナコンダのcythonは、システムのコンパイラをデフォルトでローカルアナコンダのG ++を探しますが、しないのですか?どんなメリットがありますか?

  2. システムコンパイラライブラリのanaconda cython lookを作るにはどうすればよいですか?

答えて

0
  1. なぜアナコンダは、システムのコンパイラはデフォルトでローカルアナコンダのグラム++を探してではなく、cythonん?どんなメリットがありますか?

  2. システムコンパイラライブラリのanaconda cython lookを作るにはどうすればよいですか?

  1. GCCの1つのバージョンでコンパイルされたライブラリは、あなたが見つけたとして、GCCの互換バージョンでコンパイルされた他のライブラリとリンクすることができますので。

  2. あなたはしません。上記のように、システムコンパイラでビルドされたバイナリは、anacondaコンパイラを使用して構築された他のanacondaバイナリで動作する場合と動作しない場合があります。

バイナリでシステムライブラリを使用する場合は、anacondaパッケージではなくシステムパッケージを作成する必要があります。システムパッケージは、そのシステム(およびそのバージョン)でのみ動作します。

関連する問題