ghc armv7 二进制 + 阴谋集团?非法指令
Posted
技术标签:
【中文标题】ghc armv7 二进制 + 阴谋集团?非法指令【英文标题】:ghc armv7 binary + cabal? illegal instruction 【发布时间】:2015-11-14 10:55:11 【问题描述】:我正在尝试使用最近发布的 armv7 ghc 二进制文件在 raspberry pi 2 上启动并运行,可在此处获得:
https://www.haskell.org/ghc/download_ghc_7_10_2#linux_armv7
这说明它是用 debian jesse 构建的,所以我在我的 pi2 上安装了 debian jesse。我已经成功安装了 ghc - 至少 ghci 有效。但是没有阴谋集团,显然 ghc 7.10.2 需要阴谋集团 1.22+。 cabal 的 debian 版本类似于 1.16(也将安装 ghc 7.6.x)。所以我正在尝试使用它的 bootstrap.sh 脚本从源代码安装 cabal-install。这会下载 mtl 包并构建一个“设置”可执行文件,然后尝试执行它。但是安装程序 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.
有什么想法吗?
我想知道符号链接是否是为此启用黄金的正确方法?也许我需要在每个阴谋集团项目中将其添加为 ghc 选项,或者还有其他使用黄金的方法?或者也许这根本不是问题?
【问题讨论】:
在我看来,编译器的架构已经损坏。但是我很长时间以来一直对在 pi 中运行 Haskell 很感兴趣,并且到目前为止还没有你那么幸运。所以你可以把它拉下来......如果你成功了,请告诉我们。 @dsign 我不会称其为损坏的,而是实验性的。 :) 一两周前,基于 Debian Jessie 构建的 GHC ARM 发行版被上传。 @Sibi 同意,我的措辞很不幸。我只是希望它可以被修复。 我在香蕉派和树莓派上使用了 GHC 7.8(我认为是 7.6)。在香蕉派(带拱门)上,我什至能够编译我的 yesod 项目。但这开始看起来像是一个幸运的休息时间。在 pi 上执行 7.8 的相同程序失败。 你的 Pi 上运行的是 armv7 还是 armv6 Linux 发行版? 【参考方案1】:好的,终于解决了这个问题。根据 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 实验中,它可能会更容易。
我使用的 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
【讨论】:
以上是关于ghc armv7 二进制 + 阴谋集团?非法指令的主要内容,如果未能解决你的问题,请参考以下文章
如何制作将在 iOS 5 到 7 上运行的 armv7 arm64 fat 二进制文件?