我正在开发一个无法为Debian的mips64el架构构建的软件包(haskell-src-exts),并且autobuilder返回的日志结束如下:
[24 of 24] Compiling Language.Haskell.Exts (src/Language/Haskell/Exts.hs, dist-ghc/build/Language/Haskell/Exts.p_o )
dist-ghc/build/Language/Haskell/Exts/Annotated/Syntax.dyn_o: In function `c66jH_entry':
ghc_8.hc:(.text+0x10c): relocation truncated to fit: R_MIPS_GOT_DISP against `stg_ap_0_fast'
[...]
ghc_8.hc:(.text+0x884): relocation truncated to fit: R_MIPS_GOT_DISP against `base_GHCziNum_zp_entry'
ghc_8.hc:(.text+0x8e4): additional relocation overflows omitted from the output
collect2: error: ld returned 1 exit status
/usr/share/cdbs/1/class/hlibrary.mk:147: recipe for target 'build-ghc-stamp' failed
make: *** [build-ghc-stamp] Error 1
dpkg-buildpackage: error: debian/rules build-arch gave error exit status 2
在网上搜索有关重定位的信息,以及R_MIPS_GOT_DISP后,我认为链接器存在链接问题。
奇怪的是,如果错误地将地址分配给对象或其他东西,这似乎是一种错误。问题是我很确定你不能在Haskell中对内存进行那种控制,当然也不能通过链接器。
正如在Haskell的网站上所写:
LANGUAGE编译指示允许以便携方式启用语言扩展。所有Haskell编译器都支持使用相同语法的LANGUAGE编译指示,当然并非所有编译器都支持所有扩展。如果可能,应使用LANGUAGE编译指示代替OPTIONS_GHC。
因此,这可能是使用LANGUAGE编译指示但mips GHC编译器不支持的情况。以下是Syntax.hs文件中包含其中一个编译指示的行:
{-# LANGUAGE DeriveDataTypeable, DeriveGeneric #-}
请注意,该程序包可以构建在许多其他(非mips)体系结构上。
如果这一切都是真的,我不得不得出结论mips64el版本的GHC存在问题,这就是造成这个错误的原因。
任何线索? 非常感谢