GHC ARMv7二进制文件+ Cabal?非法指令

7
我正在尝试在树莓派2上运行最近发布的针对 ARMv7 的GHC二进制文件,下载链接如下:https://www.haskell.org/ghc/download_ghc_7_10_2#linux_armv7。据称该文件是基于 Debian Jesse 构建的,所以我已经在我的树莓派2上安装了 Debian Jessie。我已经成功地安装了 GHC(至少 ghci 可以运行),但没有 cabal,而 GHC 7.10.2 需要 cabal 1.22+ 。Debian 版本的 cabal 大约是 1.16(同时也会安装 GHC 7.6.x)。因此我试图使用其 bootstrap.sh 脚本从源代码安装 cabal-install。该脚本下载了 mtl 包并构建了一个 'Setup' 可执行文件,然后试图执行它。但是 Setup exe 失败了并提示“非法操作码”。 根据下载页面的说明,“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.

有什么想法吗?

我在思考是否使用符号链接是启用gold的正确方法?也许我需要在每个Cabal项目中将其作为GHC选项添加,或者有其他使用gold的方式?或者也许这根本不是问题?


在我看来,编译器对于这个架构来说似乎是有问题的。但我很长时间以来一直对在树莓派上运行Haskell感兴趣,但迄今为止我比你运气不佳。所以你可能会成功...如果你成功了,请告诉我们。 - dsign
@Sibi 同意,我用词不当。我只是希望它能被修复。 - dsign
我在香蕉派和树莓派上都成功运行了 GHC 7.8(我想树莓派是用的7.6版本)。在香蕉派上(使用arch系统),我甚至能够编译我的 yesod 项目。但现在看起来这似乎只是个侥幸。同样的步骤在树莓派上安装7.8失败了。 - Bzzt
当前设备是树莓派2,搭载有ARMv7处理器。 - Bzzt
你能在ghc-devs列表上提出你的问题吗?我很乐意在那里帮助你。 - bgamari
显示剩余6条评论
1个回答

3

好了,终于搞清楚了。根据ghc下载页面的说法,您应该使用debian jessie自带的llvm 3.5版本。但是默认的llvm版本是3.5-10,不能正常工作。所需的是3.5.2-2版本。

我下载了3.5.2-2版本的软件包并进行了安装,但很快就陷入了依赖问题中,需要安装5-6个llvm 3.5.2-2所需的库文件。然后我切换到了debian testing版本,并更容易地安装了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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接