ghc armv7 二进制 + 阴谋集团?非法指令

ghc armv7 binary + cabal? illegal instruction

我正在努力起床 运行 在 raspberry pi 2 上使用最近发布的 armv7 ghc 二进制文件,可在此处获取:

https://www.haskell.org/ghc/download_ghc_7_10_2#linux_armv7

这表明它是用 debian jesse 构建的,所以我在我的 pi2 上安装了 debian jesse。我已经成功安装了 ghc - 至少 ghci 可以工作。但是没有 cabal,显然 ghc 7.10.2 需要 cabal 1.22+。 cabal 的 debian 版本类似于 1.16(并且还会安装 ghc 7.6.x)。所以我正在尝试使用其 bootstrap.sh 脚本从源代码安装 cabal-install。下载 mtl 包并构建一个 'Setup' 可执行文件,然后尝试执行它。但是安装程序 exe 失败并显示 'illegal instruction'。

根据下载页面,需要 'gold' 链接器。我通过

添加了

ln -s which gold ~/bin/ld

并设置我的路径以包含 ~/bin。不幸的是同样的结果。

接下来我尝试用 gold 重新安装 ghc 二进制文件(我认为)。所以作为 root:

> ln -s `which gold` /usr/local/bin/ld
> cd ghc-7.10.2
> make install

再次成功安装了ghc,但是构建cabal-install的结果是一样的:

bburdette@jessie-rpi:~/code/cabal/cabal-install$ ./bootstrap.sh 
Using gcc for C compiler. If this is not what you want, set CC.
Using /usr/lib/gcc/arm-linux-gnueabihf/4.9/collect2 instead.
Checking installed packages for ghc-7.10.2...
deepseq is already installed and the version is ok.
binary is already installed and the version is ok.
time is already installed and the version is ok.
Cabal is already installed and the version is ok.
transformers is already installed and the version is ok.
mtl-2.2.1 will be installed from local tarball.
text-1.2.0.3 will be downloaded and installed.
parsec-3.1.7 will be downloaded and installed.
network-2.6.0.2 will be downloaded and installed.
old-locale-1.0.0.7 will be downloaded and installed.
old-time-1.1.0.3 will be downloaded and installed.
HTTP-4000.2.19 will be downloaded and installed.
zlib-0.5.4.2 will be downloaded and installed.
random-1.1 will be downloaded and installed.
stm-2.4.4 will be downloaded and installed.

Using local tarball for mtl-2.2.1.
[1 of 1] Compiling Main             ( Setup.hs, Setup.o )
Linking Setup ...
Illegal instruction

Error during cabal-install bootstrap:
Configuring the mtl package failed.

有什么想法吗?

我想知道符号链接是否是为此启用黄金的正确方法?也许我需要在每个 cabal 项目中将其添加为 ghc 选项,或者还有其他使用 gold 的方法?或者也许这根本不是问题?

好的,终于搞清楚了。根据 ghc 下载页面,您应该使用 debian jessie 附带的 llvm 3.5。但是默认的 llvm 版本是 3.5-10,这是行不通的。需要的是 3.5.2-2。

我下载并安装了 3.5.2-2 的 deb,但它很快变成了依赖地狱,需要安装 llvm 3.5.2-2 需要的 5-6 个库。我切换到 debian 测试,安装 llvm 更容易。如果您正在使用 debian experimental,它可能会更容易。

我使用的ghc 7.10.2包: https://packages.debian.org/experimental/armhf/ghc/download

我在 debian jessie 上将它与默认的 llvm 3.5 一起使用的错误: https://ghc.haskell.org/trac/ghc/ticket/10863