2017-03-16 52 views
0

我正在運行Fedora 25,它隨附gcc/g++/libstdc++版本6.3.1。 我也在運行Anaconda 4.3.1版本,它附帶libstdc++ 6.0.19在Anaconda中安裝Orange3:不匹配g ++和libstdC++

當我蟒蛇下安裝Orange3(說「PIP安裝orange3」),一些文件被編譯與軟呢帽G ++,但對水蟒聯的libstdC++:

注意第三行輸出:

$ 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

如果我LD_PRELOAD軟呢帽的libstdC++,一切似乎都正常工作。 如果我在Anaconda外面安裝Orange3(通過使用pip3安裝--user orange3),它也可以工作。

我沒有從conda存儲庫安裝Orange3的原因是因爲它已經過時。

所以:如何使我的Fedora libstdC++的橙色文件鏈接?

回答

0

爲什麼_grid_density.cpython-36m-x86_64-linux-gnu.so拿起〜/ anaconda3/lib中的libstdC++。由於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 

我猜測,你可能有暢達包libgcc安裝,您沒有在使用PIP安裝Orange3安裝暢達包gcc。因此衝突。

您有以下選擇:

  1. 刪除libgcc中:conda remove -y libgcc
  2. 刪除RPATH從.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. 
    
  3. 轉換RPATHRUNPATH

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

    所以,你可以這樣做以後將其覆蓋:

    LD_LIBRARY_PATH=/lib64 /path/to/python/program 
    
  4. 建立自己的包。

只有在有對包從其他包依賴我會強烈反對選項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呢!