2017-03-16 2 views
0

gcc/g++/libstdc++ 버전 6.3.1과 함께 제공되는 Fedora 25를 실행 중입니다. 나는 또한 libstdc++ 6.0.19과 함께 제공되는 Anaconda 버전 4.3.1을 실행하고 있습니다. 내가 ("orange3 설치 PIP"말에 의해) 아나콘다에서 Orange3를 설치하면Orange3를 아나콘다에 설치 : 불일치 g ++ 및 libstdC++

는 일부 파일은 페도라 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

I LD_PRELOAD 페도라 된 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 -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. 
    
  2. 변환 .so 파일에서 conda remove -y libgcc

  3. 제거 RPATH를 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에 자신의 채널에 업로드 할 수 있습니다!

관련 문제