2017-03-16 7 views
0

私はgcc/g++/libstdc++バージョン6.3.1に付属しているFedora 25を実行しています。 私はまた、libstdc++ 6.0.19に付属のAnacondaバージョン4.3.1を実行しています。私は(「orange3インストールPIP」と言って)アナコンダの下Orange3をインストールするとOrange3をAnacondaにインストールする:g ++とlibstdC++の不一致

は、いくつかのファイルがFedorasグラム++でコンパイルされたが、アナコンダに対してリンクされているのlibstdC++:

注出力の3行目:

$ ldd ~/anaconda3/lib/python3.6/site-packages/Orange/widgets/utils/_grid_density.cpython-36m-x86_64-linux-gnu.so 
linux-vdso.so.1 (0x00007ffe9b5a2000) 
libpython3.6m.so.1.0 => /home/marhoy/anaconda3/lib/libpython3.6m.so.1.0 (0x00007efc3a6ef000) 
libstdc++.so.6 => /home/marhoy/anaconda3/lib/libstdc++.so.6 (0x00007efc3a3d9000) 
libm.so.6 => /lib64/libm.so.6 (0x00007efc3a0ad000) 
libgcc_s.so.1 => /home/marhoy/anaconda3/lib/libgcc_s.so.1 (0x00007efc39e97000) 
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007efc39c79000) 
libc.so.6 => /lib64/libc.so.6 (0x00007efc398b1000) 
libdl.so.2 => /lib64/libdl.so.2 (0x00007efc396ad000) 
libutil.so.1 => /lib64/libutil.so.1 (0x00007efc394aa000) 
librt.so.1 => /lib64/librt.so.1 (0x00007efc392a2000) 
/lib64/ld-linux-x86-64.so.2 (0x000055a3c43d1000) 

これは、6.3.1と6.0.19の間に違いがあるため、問題を引き起こします。私は、散布図のウィジェットを使用しようとするので、私が取得:

_grid_density.cpython-36m-x86_64-linux-gnu.so: undefined symbol: __cxa_throw_bad_array_new_length

I LD_PRELOAD FedorasのlibstdC++場合は、すべてが正常に動作するようです。 また、Orange3をAnacondaの外にインストールすると(pip3 install --user orange3を使用して)、それも機能します。

なぜ私はOrange3をcondaリポジトリからインストールしないのですかは、古くなっているからです。

So:私のFedora libstdC++に対してOrange-filesリンクを作るにはどうしたらいいですか?

答えて

0

_grid_density.cpython-36m-x86_64-linux-gnu.soは〜/ anaconda3/libからlibstdC++。soを取得するのはなぜですか? RPATHのため、次

(root)# chrpath -l /conda/lib/python3.6/site-packages/Orange/widgets/utils/_grid_density.cpython-36m-x86_64-linux-gnu.so 
/conda/lib/python3.6/site-packages/Orange/widgets/utils/_grid_density.cpython-36m-x86_64-linux-gnu.so: RPATH=/conda/lib 

私は推測しています、あなたはおそらくcondaパッケージlibgccがインストールされていたとピップを使用してOrange3のインストール中はcondaパッケージgccがインストールされていませんでした。したがって、紛争。

次のオプションがあります。

  1. はlibgccのを削除します。

    (root)# chrpath -c /conda/lib/python3.6/site-packages/Orange/widgets/utils/_grid_density.cpython-36m-x86_64-linux-gnu.so 
    
    conda remove -y libgcc
  2. RUNPATHRPATH変換

  3. の.soファイルから
    (root)# chrpath -d /conda/lib/python3.6/site-packages/Orange/widgets/utils/_grid_density.cpython-36m-x86_64-linux-gnu.so 
    (root)# chrpath -l /conda/lib/python3.6/site-packages/Orange/widgets/utils/_grid_density.cpython-36m-x86_64-linux-gnu.so 
    /conda/lib/python3.6/site-packages/Orange/widgets/utils/_grid_density.cpython-36m-x86_64-linux-gnu.so: no rpath or runpath tag found. 
    
  4. をRPATHを削除します

    だから、後でやってそれを上書きできること:

    LD_LIBRARY_PATH=/lib64 /path/to/python/program 
    
  5. を、独自のパッケージをビルドします。

私は強くオプション2または3に反対します。他のパッケージからそのパッケージに依存しない場合に限り、1を実行できます。最良の解決策は、4を行うか、またはconda-forgeを使用することです(今のところv3.4.0を使用しています)。

$ pip uninstall Orange3 
$ conda install -c conda-forge orange3 

あなたは、https://github.com/conda-forge/orange3-feedstock/tree/master/recipeでorange3のレシピを見て、あなたが望む最新バージョン(v3.4.1)のためにそれを修正し、あまりにもanaconda.orgに独自のチャンネルにアップロードすることができます!

関連する問題