我正在尝试double-conversion从Hackage 构建软件包.它构建正常但ghci无法加载它.投诉是:
Loading package double-conversion-0.2.0.0 ... linking ... <interactive>:
/home/me/.cabal/lib/double-conversion-0.2.0.0/ghc-7.0.4/HSdouble-conversion-0.2.0.0.o:
unknown symbol `_ZNK17double_conversion6Double5valueEv'
Run Code Online (Sandbox Code Playgroud)
该nm输出显示符号是弱:
nm /home/me/.cabal/lib/double-conversion-0.2.0.0/ghc-7.0.4/HSdouble-conversion-0.2.0.0.o \
| grep _ZNK17double_conversion6Double5valueEv
00000000 W _ZNK17double_conversion6Double5valueEv
Run Code Online (Sandbox Code Playgroud)
这是文件中唯一的弱符号,实际上,据我所知,在GHC编译的软件包的整个世界中.
有问题的函数显然是一个FFI函数,用C++编写并在内联中定义double-conversion/src/double.h.它不是唯一的内联函数,但只有这一个被标记为弱.
作为一种权宜之计,我已将该功能移到了外线,现在加载了包.但那里显然存在一些问题.为什么这个功能很弱?为什么其他功能不是?ghc应该用弱符号抱怨吗?我应该提交一个错误,如果是这样,谁应该得到它(双转换,gcc,ghc,别人?)
系统数据:Gentoo Linux,gcc-4.4.5,ghc-7.0.4,cabal-1.10.2.0.
GHC Trac 上的这张票看起来很相关:Can't use ghci with a library linked against libstdc++。这看起来像是 Gentoo(或可能是 GCC 4.4)特定的问题 -.o有问题的文件在我的系统上不包含任何弱符号(我在 Ubuntu Natty 上使用 GCC 4.5.2 和 GHC 7.0.3/7.0.4 进行了测试) 。我建议您在 GHC Trac 上提交票证。顺便说一句,我可以重现#5289。