在'yesod devel'期间构建失败

时间:2012-07-14 16:46:26

标签: haskell cabal yesod

我正在关注Yesod quick start guide,我在cabal installyesod devel关于persistent-sqlite模块时遇到错误。我已经安装了ghc-7.4.1和haskell-platform-2012.2.0.0。

$ cabal install:

  

加载包persistent-sqlite-0.9.0.2 ...链接... ghc:   /home/roberto/.cabal/lib/persistent-sqlite-0.9.0.2/ghc-7.4.1/HSpersistent-sqlite-0.9.0.2.o:   未知符号`__warn_memset_zero_len'

     

ghc:无法加载包'persistent-sqlite-0.9.0.2'

     

cabal:错误:某些软件包无法安装:mate-0.0.0在构建阶段失败。例外是:ExitFailure 1

$ yesod devel:

  

ghc:/home/roberto/.cabal/lib/persistent-sqlite-0.9.0.2/ghc-7.4.1/HSpersistent-sqlite-0.9.0.2.o:未知符号`__warn_memset_zero_len'

     

ghc:无法加载包`persistent-sqlite-0.9.0.2'构建失败,暂停...

$ ghc-pkg list:

persistent-sqlite-0.9.0.2
yesod-platform-1.0.5

$ cabal install persistent-sqlite --reinstall

  

在功能'memset'中,

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

/usr/include/bits/string3.h:82:0:        警告:调用带有属性警告声明的'__warn_memset_zero_len':memset与常量零长度参数一起使用;这可以   是由于转置参数

如果我在__warn_memset_zero_len();中评论该行,/usr/include/bits/string3.h:82,一切都会好起来的。有没有一个合适的解决方案,比如告诉ghc不要停止编译警告?

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

有些评论可能有所帮助:

长度为零的memset错误不容忽视。

未知符号错误可能表示底层sqlite库版本太旧了。

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

  • cabal-dev不是使用cabal,而是为您的项目提供一个sanboxed库数据库。

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

干杯!

答案 2 :(得分:1)

我在#ghc-dev上的FreeNode irc上问了同样的问题,并且被告知这个错误是由于模板Haskell机制中的一些问题而发生的,这些机制使用GHCi进行预编译。这恰好在尝试预编译SQLite库时发生。

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

我很惊讶这个问题存在了这么长时间。