2011-04-04 55 views
6

我在寫一個多平臺的ncurses文本冒險遊戲。所需的C庫ncursesw爲x86配置,但我的操作系統是Mac OS X 10.6.6 x86_64。在GHC中指定拱?

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) 

我想,這更容易迫使編譯爲86比說服自制,MinGW的,運用和能力傾向庫包括一個x86_64的ncursesw庫。

是否有命令行選項可以傳遞給ghc來指定體系結構,類似於GCC的-march

+0

不幸的是,查看手冊頁並沒有發現任何此類內容。 – 2011-04-04 07:40:03

+0

@Rafe我知道:( – mcandre 2011-04-04 08:11:03

+0

我正在尋找解決這個問題的方法,這是對未來讀者的一個評論Linux的https://ghc.haskell.org/trac/ghc/wiki/Building/Compiling32on64; Windows https: //ghc.haskell.org/trac/ghc/wiki/Building/Preparation/Windows – 2016-12-31 20:20:39

回答

2

它看起來像你的ghc配置爲32位(i386),而ncurses庫是64位(x86-64)。我相信最新的Haskell平臺(2011.2.x.x)使用​​64位ghc,而早期版本提供了32位ghc。

如果您使用較早的惠普,升級到最新版本可能足以解決此問題。

不幸的是,ghc不是一個本地交叉編譯器,你不能通過一個標誌設置體系結構或字大小。您需要爲每個想要使用的架構單獨使用ghc,並且還需要確保鏈接的所有庫匹配它。因爲它可以指32位或64位,通常它指的是32位版本,但並不總是如此,至少在XCode 3的OSX 10.6上,gcc拒絕它作爲-march的無效值)

1

使用cabal,併爲.caabal文件中要包含庫的arch-specific標誌設置。

例如

> if flag(use_altivec) 
>   cc-options: 
>    -DHAVE_ALTIVEC 

GHC交叉編譯(如你想這樣做),你需要安裝GHC的x86版(32位)。

+0

我使用的是官方的Haskell Platform Mac OS X軟件包,所以它應該是x86(我不應該有這個問題)。除非i386與x86不同。 – mcandre 2011-04-04 08:10:21

+0

@mcandre:如果用'x86'表示'x86-64',那麼它們是不同的。 – 2011-04-04 11:08:04