首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >链接器找不到为jupyter笔记本安装IHaskell内核-lgmp

链接器找不到为jupyter笔记本安装IHaskell内核-lgmp
EN

Stack Overflow用户
提问于 2018-11-04 07:25:54
回答 4查看 1.4K关注 0票数 6

我正在尝试直接从instructions here在jupyter中安装IHaskell。

我运行了以下命令。

代码语言:javascript
复制
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命令中得到了这个错误:

代码语言:javascript
复制
(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是通过以下方式解决的:

代码语言:javascript
复制
$ sudo apt-get install libgmp3-dev

这是我干的。这已成功安装,但

代码语言:javascript
复制
(envname) me@machine:~/plc/IHaskell$ stack install gtk2hs-buildtools

仍然会产生相同的错误。哪里出了问题,我该如何修复它?

从scinart的建议更新

代码语言:javascript
复制
$ 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

看起来不错!

代码语言:javascript
复制
(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

推荐的here,也不起作用。

更新3

This看起来也是同样的问题,用这种方式解决了,但对我不起作用。

EN

回答 4

Stack Overflow用户

发布于 2019-01-08 15:46:24

2019年1月12日更新

我最近重新安装了最新的anaconda (Anaconda3-2018.12-Linux-x86_64.sh)。但这一次没有在上面安装任何gcc软件包(如gxx_linux-64),也没有将我的特定环境的bin目录添加到我的$PATH (它安装在我的.bashrc文件中的代码片段似乎可以做到这一点),default IHaskell instructions运行得很顺利,即使已经激活了conda我的conda环境。

原文:

出于我的目的,我希望jupyter的IHaskell能够学习Haskell,并在我学习时做一些笔记。我还在我的环境中使用了conda via anaconda,用于其他编程目的,并且得到了与上面相同的错误。所以..。另外,我设置了一个不基于conda的jupyter实例,这似乎起到了很好的作用。

然后,我将jupyter安装为全局二进制文件。在我的Ubuntu Linux案例中,它使用的是sudo apt install jupyter-notebook。然后,我在conda deactivate ; export PATH=/usr/bin:$PATH打开的终端窗口中有选择地停用了conda。

我还添加了一个指向本地libgmp的符号链接,以使其更易于查找。我发现使用libgmp.so.3符号链接工作得很好(即使它链接到较新的libgmp)。

代码语言:javascript
复制
$ 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)的releases one下载了堆栈,并将其放在某个目录中,~/apps/stack,我将其添加到我的$PATH中,这样我就可以调用stack了。从那时起,通过禁用上面的每个命令的conda,来自IHaskell的指令变得更加流畅。我想我需要为可选的gtk2hs-buildtools to stack install (YMMV)添加allow-newer: true

就这样,haskell内核已经安装好,可以使用了:

代码语言:javascript
复制
$ 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内核已经可用,并且工作正常:

代码语言:javascript
复制
$ 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在其他终端会话上工作得很好。这并不是一个很好的生产设置,但如果您只是想制作包含haskell内容的jupyter-notebook,这似乎已经足够好了。

票数 1
EN

Stack Overflow用户

发布于 2020-10-29 23:33:02

简而言之,如果当你通过栈安装ghc时,你在其环境中启用了Anaconda,并在其环境中使用了gcc和ld,那么ghc将永远被破坏。一种解决方法是删除堆栈安装的ghc,conda uninstall ... Anaconda的gcc (可能是gcc_linux-64包)和ld ( binutils_linux-64binutils_impl_linux-64包),再次安装ghc (然后重新安装Anaconda的gcc和ld,如果你真的想要的话)。

有关更深入的分析,请参阅https://github.com/haskell/cabal/issues/5280#issuecomment-718818157

票数 1
EN

Stack Overflow用户

发布于 2018-11-11 01:33:20

所以,问题是/home/me/anaconda3/.../gcc/7.3.0/bin/ld: cannot find -lgmp

根据conda document的说法

编译器和链接器不查找系统头文件和库

建议使用conda进行安装。我们正在积极工作,以确保conda-forge也提供这些工具。

conda-forge的主页是https://conda-forge.org,用法是

代码语言:javascript
复制
conda config --add channels conda-forge
conda install gmp

这个gmp与debian/sid libgmp3-dev的版本相同,应该可以构建libgmp.so,请参阅this

希望它能起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53136410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档