Установка ядра IHaskell для ноутбуков jupyter -lgmp не может быть найден Linker - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь установить IHaskell в jupyter, прямо из инструкции здесь .

Я запустил следующее.

sudo apt-get install -y python3-pip git libtinfo-dev libzmq3-dev libcairo2-dev libpango1.0-dev libmagic-dev libblas-dev liblapack-dev    
git clone https://github.com/gibiansky/IHaskell
cd IHaskell
pip3 install -r requirements.txt
stack install gtk2hs-buildtools
# stack install --fast
# ihaskell install --stack
# jupyter labextension install ihaskell_jupyterlab

Я получил эту ошибку в 5-й команде выше, gtk2hs-buildtools one:

(envname) me@machine:~/plc/IHaskell$ stack install gtk2hs-buildtools
Linking /home/me/.stack/setup-exe-cache/x86_64-linux/tmp-Cabal-simple_mPHDZzAJ_2.2.0.1_ghc-8.4.4 ...
/home/me/anaconda3/envs/envname/bin/../lib/gcc/x86_64-conda_cos6-linux-gnu/7.3.0/../../../../x86_64-conda_cos6-linux-gnu/bin/ld: cannot find -lgmp
collect2: error: ld returned 1 exit status
`x86_64-conda_cos6-linux-gnu-cc' failed in phase `Linker'. (Exit code: 1)

--  While building simple Setup.hs using:
      /home/me/.stack/programs/x86_64-linux/ghc-8.4.4/bin/ghc -rtsopts -threaded -clear-package-db -global-package-db -hide-all-packages -package base -main-is StackSetupShim.mainOverride -package Cabal-2.2.0.1 /home/me/.stack/setup-exe-src/setup-mPHDZzAJ.hs /home/me/.stack/setup-exe-src/setup-shim-mPHDZzAJ.hs -o /home/me/.stack/setup-exe-cache/x86_64-linux/tmp-Cabal-simple_mPHDZzAJ_2.2.0.1_ghc-8.4.4
    Process exited with code: ExitFailure 1

Некоторые поиски сказали мне, что cannot find -lgmp решается с помощью:

$ sudo apt-get install libgmp3-dev

Я сделал это. Это успешно установлено, но

(envname) me@machine:~/plc/IHaskell$ stack install gtk2hs-buildtools

По-прежнему выдает ту же ошибку. Что не так и как мне это исправить?

Обновление по предложению Scinart

$ conda install gmp
Solving environment: done

## Package Plan ##

  environment location: /home/me/anaconda3/envs/envname

  added / updated specs: 
    - gmp


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    openssl-1.0.2p             |       h470a237_1         3.1 MB  conda-forge
    ca-certificates-2018.10.15 |       ha4d7672_0         135 KB  conda-forge
    certifi-2018.10.15         |        py36_1000         138 KB  conda-forge
    gmp-6.1.2                  |       hfc679d8_0         676 KB  conda-forge
    ------------------------------------------------------------
                                           Total:         4.0 MB

The following packages will be UPDATED:

    ca-certificates: 2018.03.07-0      --> 2018.10.15-ha4d7672_0 conda-forge
    certifi:         2018.10.15-py36_0 --> 2018.10.15-py36_1000  conda-forge
    openssl:         1.0.2p-h14c3975_0 --> 1.0.2p-h470a237_1     conda-forge

The following packages will be DOWNGRADED:

    gmp:             6.1.2-h6c8ec71_1  --> 6.1.2-hfc679d8_0      conda-forge

Proceed ([y]/n)? y


Downloading and Extracting Packages
openssl-1.0.2p       | 3.1 MB    | ######################################################################################################################################################################################################## | 100% 
ca-certificates-2018 | 135 KB    | ######################################################################################################################################################################################################## | 100% 
certifi-2018.10.15   | 138 KB    | ######################################################################################################################################################################################################## | 100% 
gmp-6.1.2            | 676 KB    | ######################################################################################################################################################################################################## | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done

Хорошо выглядит!

(envname) me@machine:~/plc/IHaskell$ stack install gtk2hs-buildtools
Linking /home/me/.stack/setup-exe-cache/x86_64-linux/tmp-Cabal-simple_mPHDZzAJ_2.2.0.1_ghc-8.4.4 ...
/home/me/anaconda3/envs/envname/bin/../lib/gcc/x86_64-conda_cos6-linux-gnu/7.3.0/../../../../x86_64-conda_cos6-linux-gnu/bin/ld: cannot find -lgmp
collect2: error: ld returned 1 exit status
`x86_64-conda_cos6-linux-gnu-cc' failed in phase `Linker'. (Exit code: 1)

--  While building simple Setup.hs using:
      /home/me/.stack/programs/x86_64-linux/ghc-8.4.4/bin/ghc -rtsopts -threaded -clear-package-db -global-package-db -hide-all-packages -package base -main-is StackSetupShim.mainOverride -package Cabal-2.2.0.1 /home/me/.stack/setup-exe-src/setup-mPHDZzAJ.hs /home/me/.stack/setup-exe-src/setup-shim-mPHDZzAJ.hs -o /home/me/.stack/setup-exe-cache/x86_64-linux/tmp-Cabal-simple_mPHDZzAJ_2.2.0.1_ghc-8.4.4
    Process exited with code: ExitFailure 1

Черт, та же ошибка, что и раньше.

Итак, из этого вы можете видеть, что у меня установлен пакет gmp, и на самом деле у него была более высокая версия. Кажется, проблема в том, что компоновщик не может найти gmp по какой-то причине (даже если он там есть), поэтому переустановка gmp не поможет.

Обновление 2

Еще одна вещь, которую я попробовал, была:

$ conda install gxx_linux-64

рекомендуется здесь , также не работает.

Обновление 3

Это также выглядело как та же проблема, решенная таким образом, но у меня не сработало.

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Обновление 01/12/2019 :

Я недавно переустановил последнюю версию anaconda (Anaconda3-2018.12-Linux-x86_64.sh). Но на этот раз не установил на него пакет gcc (например, gxx_linux-64) и не добавил каталоги bin моего конкретного env в мой $ PATH (фрагмент, который он устанавливает в моем файле .bashrc, похоже, управляет этим ) и инструкции IHaskell по умолчанию прошли гладко, даже при включенной среде conda моя среда conda.


Оригинальный пост:

Для моих целей я хотел, чтобы IHaskell для jupyter выучил Haskell и сделал несколько заметок, пока я делал это. У меня также есть conda через anaconda в моей среде, который использовался для других целей программирования, и получил ту же ошибку, что вы сделали выше. Итак ... Я настроил экземпляр jupyter, который не был основан на conda, кроме того, и это, похоже, помогло.

Затем я установил jupyter как глобальный бинарный файл. В моем случае с Ubuntu Linux это было с sudo apt install jupyter-notebook. Затем я выборочно деактивировал conda только в окне терминала, в котором был включен conda deactivate ; export PATH=/usr/bin:$PATH.

Я также добавил символическую ссылку в свой локальный libgmp, чтобы сделать его более доступным. Я обнаружил, что наличие символьной ссылки libgmp.so.3 работает нормально (даже если она связана с более новой libgmp).

$ sudo ldconfig -p | grep libgmp
  libgmp.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libgmp.so
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libgmp.so /usr/lib/libgmp.so.3
$

Затем я скачал стек из релизов , один с gmp (stack-1.9.3-linux-x86_64-gmp4.tar.gz) и поместил его в какой-то каталог, ~/apps/stack, который я добавил в свой $ PATH, чтобы я мог вызвать stack , С этого момента, когда conda деактивировано для указанной выше команды, инструкции от IHaskell стали более плавными. Я думаю, что мне нужно было добавить allow-newer: true для необязательного stack install gtk2hs-buildtools для работы (YMMV).

И все, ядро ​​haskell установлено и готово к использованию:

$ which ihaskell
/home/yuvilio/.local/bin/ihaskell
$ ihaskell install --stack
$ jupyter kernelspec list
Available kernels:
  haskell      /home/yuvilio/.local/share/jupyter/kernels/haskell
...
$

А потом эврика, все заработало. Я просто использовал свои глобально установленные jupyter-notebook и jupyter-console (с отключенной в этом терминале conda, как указано выше), и ядро ​​haskell было доступно и работало просто отлично:

$ jupyter-console --kernel=haskell
Jupyter console 5.2.0
IHaskell 0.9.1.0 GHC 8.6.3
In [1]: sum[1..5]
:15
In [2]: double x = x + x
In [3]: double 3
:6

Я уверен, что есть более умный способ заставить IHaskell работать с conda, но похоже, что это все еще продолжается . Хорошая вещь об этой настройке состоит в том, что на других экранах терминалов мой conda работал нормально, как обычно на других сеансах терминала. Это не очень сложная производственная установка, но если вы просто хотите сделать jupyter-ноутбуки с контентом на haskell, этого достаточно для начала работы.

0 голосов
/ 10 ноября 2018

Итак, проблема в том, что /home/me/anaconda3/.../gcc/7.3.0/bin/ld: cannot find -lgmp

Согласно документу conda

компиляторы и компоновщики не ищут системные заголовки и библиотеки

рекомендуется использовать conda для их установки. Мы активно работаем над тем, чтобы conda-forge также предоставила эти инструменты.

Домашняя страница conda-forge - https://conda -forge.org , использование

conda config --add channels conda-forge
conda install gmp

Этот gmp является той же версией, что и debian / sid libgmp3-dev, и он должен собрать libgmp.so, см. this

Надеюсь, это сработает.

...