2

我正在关注Yesod 快速入门指南cabal install,但在执行和yesod devel有关persistent-sqlite模块时遇到错误。我已经安装了 ghc-7.4.1 和 haskell-platform-2012.2.0.0。

$阴谋安装:

加载包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 开发:

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 列表:

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 不要停止编译警告?

4

3 回答 3

2

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

于 2012-11-02T21:51:43.997 回答
1

一些可能有帮助的评论:

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

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

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

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

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

干杯!

于 2012-09-23T14:06:56.353 回答
1

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

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

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

于 2013-12-27T09:25:42.623 回答