Haskell 在GHC中指定拱门?

Haskell 在GHC中指定拱门?,haskell,x86,x86-64,ncurses,ghc,Haskell,X86,X86 64,Ncurses,Ghc,我正在写一个多平台的ncurses文本冒险游戏。所需的C库ncursesw是为x86配置的,但我的操作系统是Mac OS X 10.6.6 x86_64 ghc --make -o rogue rogue.hs [1 of 2] Compiling Dungeon ( Dungeon.hs, Dungeon.o ) [2 of 2] Compiling Main ( rogue.hs, rogue.o ) Linking rogue ... ld: wa

我正在写一个多平台的ncurses文本冒险游戏。所需的C库ncursesw是为x86配置的,但我的操作系统是Mac OS X 10.6.6 x86_64

ghc --make -o rogue rogue.hs
[1 of 2] Compiling Dungeon          ( Dungeon.hs, Dungeon.o )
[2 of 2] Compiling Main             ( rogue.hs, rogue.o )
Linking rogue ...
ld: warning: in /usr/local/lib/libncursesw.dylib, file was built for unsupported file format which is not the architecture being linked (i386)
我认为强制编译x86要比说服Homebrew、MinGW和Aptitude存储库包含x86_64 ncursesw库容易得多


是否有一个命令行选项可以传递给ghc以指定架构,类似于GCC的
-march

使用cabal,并为.cabal文件中包含的库设置特定于arch的标志

例如


要强制GHC交叉编译(如您所愿),您需要安装一个x86版本的GHC(32位)。

看起来您的GHC配置为32位(
i386
),而ncurses库是64位(
x86-64
)。我相信最新的Haskell平台(2011.2.x.x)使用了64位ghc,而早期版本提供了32位ghc

如果您使用的是早期HP,升级到最新版本可能就足以解决此问题

不幸的是,ghc不是本机交叉编译器,您无法通过标志设置体系结构或字大小。对于要使用的每个体系结构,您都需要一个单独的ghc,并且还需要确保您链接的所有库都与之匹配


(顺便说一句,
x86
不足以区分体系结构,因为它可以指32位或64位。按惯例,它指的是32位版本,但并不总是如此。至少在带有XCode 3的OSX 10.6上,gcc拒绝将其作为-march的无效值)

查看手册页并没有显示任何此类内容,不幸的是,我一直在寻找解决这个问题的办法。这是给未来读者的评论。Linux;Windows我使用的是官方的Haskell平台Mac OS X软件包,所以它应该是x86(我不应该有这个问题)。除非i386与x86不同。@mcandre:如果您所说的x86是指x86-64,那么它们是不同的。
> if flag(use_altivec)
>         cc-options:
>             -DHAVE_ALTIVEC