我正在尝试构建 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'
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
这是文件中唯一的弱符号,事实上,据我所知,在整个 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
有问题的文件在我的系统上不包含任何弱符号(我在带有 GCC 4.5.2 和 GHC 7.0.3/7.0.4 的 Ubuntu Natty 上进行了测试)。我建议你在 GHC Trac 上提交一张票。顺便说一句,我可以重现#5289。
关于gcc - Hackage 包中的 undefined symbol `double-conversion`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6634373/