我正在尝试直接从 instructions here 在 jupyter 中安装 IHaskell 。
我运行了以下命令。
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
一些搜索告诉我找不到-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 安装 gxx_linux-64
推荐here ,也没有用。
更新3
This看起来也像同样的问题,以这种方式解决,但对我不起作用。
最佳答案
2019 年 1 月 12 日更新:
我最近重新安装了最新的 anaconda (Anaconda3-2018.12-Linux-x86_64.sh)。但这一次没有在其上安装任何gcc软件包(例如gxx_linux-64),也没有将我的特定环境的bin目录添加到我的$PATH(它安装在我的.bashrc
文件中的片段似乎管理那个)和 default IHaskell instructions即使激活了 conda 我的 conda 环境,也很顺利。
原帖:
出于我的目的,我希望 IHaskell for jupyter 能够学习 Haskell 并在这样做时做一些笔记。我还有conda
通过我的环境中的 anaconda,用于其他编程目的,并得到与上面相同的错误。所以......我设置了一个不基于 conda 的 jupyter 实例,另外,这似乎可以解决问题。
然后我将 jupyter 安装为全局二进制文件。在我的 Ubuntu Linux 中,它是 sudo apt install jupyter-notebook
。然后,我在我所在的终端窗口中选择性地停用了 conda conda deactivate ; export PATH=/usr/bin:$PATH
.
我还向本地 libgmp 添加了一个符号链接(symbolic link),以使其更易于查找。我发现有一个 libgmp.so.3
符号链接(symbolic link)工作正常(即使它链接到较新的 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
$
然后我从releases下载了堆栈一个 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 一起工作,但听起来像是 still in progress 。这个设置的好处是,在其他终端屏幕上,我的 conda 在其他终端 session 上正常工作。这并不是一个生产设置,但如果您只想制作包含 haskell 内容的 jupyter 笔记本,这似乎足以开始。
关于anaconda - 为jupyter笔记本安装IHaskell内核 - Linker无法找到lgmp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53136410/