Установка ядра IHaskell для ноутбуков jupyter -lgmp не может быть найден Linker
Я пытаюсь установить 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
один:
(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
Это также выглядело как та же проблема, решенная таким образом, но у меня не получилось.
4 ответа
Обновление 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
symlink работал хорошо (даже если он связан с более новой 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, этого достаточно для начала работы.
Вкратце, если при установке ghc через стек у вас включена Anaconda с gcc и ld в своей среде, то ghc навсегда выйдет из строя. Один из способов обхода - удалить установленный стек ghc,
conda uninstall ...
Gcc от Anaconda (вероятно,
gcc_linux-64
пакет) и ld (binutils_linux-64
и
binutils_impl_linux-64
пакеты), снова установите ghc (а затем переустановите gcc и ld Anaconda, если хотите).
См. https://github.com/haskell/cabal/issues/5280#issuecomment-718818157 для более глубокого анализа.
Итак, проблема в том, что /home/me/anaconda3/.../gcc/7.3.0/bin/ld: cannot find -lgmp
Согласно документу Конда
компиляторы и компоновщики не ищут системные заголовки и библиотеки
рекомендуется использовать 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, посмотрите это
Надеюсь, это сработает.
Что ж, по состоянию на 15.07.21 я просто получаю ihaskell: команда не найдена, когда я следую инструкциям по умолчанию :-(
Обновлять:
Думаю, это связано с
stack install --fast
дает эту ошибку:
error: /usr/bin/ld.gold: error: cannot find -ltinfo
поэтому я побежал:
sudo apt-get install libtinfo-dev