2012-07-14 31 views
2

我在关注Yesod quick start guide,并且我在persistent-sqlite模块中出现了错误cabal installyesod devel。我已经安装了ghc-7.4.1和haskell-platform-2012.2.0.0。'yesod devel'中的构建失败

$小集团安装:

Loading package persistent-sqlite-0.9.0.2 ... linking ... ghc: /home/roberto/.cabal/lib/persistent-sqlite-0.9.0.2/ghc-7.4.1/HSpersistent-sqlite-0.9.0.2.o: unknown symbol `__warn_memset_zero_len'

ghc: unable to load package `persistent-sqlite-0.9.0.2'

cabal: Error: some packages failed to install: mate-0.0.0 failed during the building phase. The exception was: ExitFailure 1

$耶索德devel的:

ghc: /home/roberto/.cabal/lib/persistent-sqlite-0.9.0.2/ghc-7.4.1/HSpersistent-sqlite-0.9.0.2.o: unknown symbol `__warn_memset_zero_len'

ghc: unable to load package `persistent-sqlite-0.9.0.2' Build failure, pausing...

$ GHC-PKG列表:

persistent-sqlite-0.9.0.2 
yesod-platform-1.0.5 

$小集团安装持久sqlite的--reinstall

In function ‘memset’,

inlined from ‘exprDup’ at cbits/sqlite3.c:68471:0: 

/usr/include/bits/string3.h:82:0: warning: call to ‘__warn_memset_zero_len’ declared with attribute warning: memset used with constant zero length parameter; this could be due to transposed parameters

如果我评论这条线,__warn_memset_zero_len();/usr/include/bits/string3.h:82,一切顺利。有没有适当的解决方案,比如告诉ghc不要停止编译警告?

+0

我有一个看的持久源码包在$ HOME/.cabal /包.cabal文件,查找应引起问题'-Werror' GHC选项,但我发现一个相反,“壁”。对于我创建的yesod项目也是如此,称为'mate'; mate.cabal没有任何'-Werror'。 – rturrado 2012-07-18 17:33:14

回答

1

我是问在#GHC-dev的Freenode上IRC同样的问题,被告知这个错误发生的原因是模板哈斯克尔机制的一些问题,使用GHCI预编译的东西。这正好发生在试图预编译SQLite库时。

我还被告知,这应该用即将发布的新版GHC修复:v7.8.x(但它仍然需要一些时间才能将其作为新的Haskell平台的一部分)。

而且我很惊讶的是,问题是有这么长的时间。

+0

谢谢。关闭这个问题,因为它现在已经打开了很长一段时间。这个答案对我来说似乎相当公平。 – rturrado 2016-08-12 06:48:14

1

一些评论,可以帮助:

一个memset误差为零长度是不是忽视。

未知的符号错误可能会说底层的sqlite库版本太旧。

  • 考虑更新sqlite,或者在优化问题的情况下检查gcc版本是否不太旧。

  • 代替使用cabal,cabal-dev为您的项目提供了sanboxed库数据库。

  • 而是单独安装库,最好将它们全部列出在.cabal项目文件中指定的版本依赖性。 (yesod平台和persistent-sqlite有相关性)

干杯!

2

运行时出现未知符号错误yesod devel通常是因为未在应用程序的cabal文件中将模块包含在exposed-modulesother-modules中。