我正在编写一个多平台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
?
答案 0 :(得分:2)
看起来你的ghc配置为32位(i386
),而ncurses库是64位(x86-64
)。我相信最新的Haskell平台(2011.2.x.x)使用的是64位ghc,而早期版本提供了32位ghc。
如果您使用的是早期的HP,升级到最新版本可能足以解决此问题。
不幸的是,ghc不是本机交叉编译器,您无法通过标志设置体系结构或字大小。您需要为要使用的每个体系结构单独使用ghc,并且还需要确保链接的所有库都与之匹配。
(BTW,x86
不足以区分架构,因为它可以指32位或64位。传统上它指的是32位版本,但并非总是如此。至少在OSX 10.6上使用XCode 3 ,gcc拒绝它作为-march的无效值
答案 1 :(得分:1)
使用cabal,并设置特定于arch的标志,以便将库包含在.cabal文件中。
E.g。
> if flag(use_altivec)
> cc-options:
> -DHAVE_ALTIVEC
要强制 GHC进行交叉编译(正如您所希望的那样),您需要安装x86版本的GHC(32位)。