我正在关注Yesod quick start guide,我在cabal install
和yesod 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不要停止编译警告?
答案 0 :(得分:2)
运行yesod devel
时出现未知符号错误通常是由于未能在应用程序的cabal文件中的exposed-modules
或other-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平台的一部分)
我很惊讶这个问题存在了这么长时间。