2012-07-14 5 views
2

나는 Yesod quick start guide을 따르고 있으며, persistent-sqlite 모듈에 관해서는 cabal installyesod devel의 에러가 발생합니다. 이미 ghc-7.4.1 및 haskell-platform-2012.2.0.0을 설치했습니다.'yesod 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 목록 :

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

는 yesod의 (STABLE) $

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/packages에있는 persistent-sqlite 패키지의 .cabal 파일을 살펴본 결과, 문제의 원인이 될 수있는'-Werror' ghc 옵션을 찾고 있었지만 대신'-Wall' 그리고 'mate '라고 부르는 yesod 프로젝트에 대해서도 마찬가지입니다. mate.cabal에는'-Werror'가 없습니다. – rturrado

답변

1

# ghc-dev의 FreeNode irc에서 같은 질문을하고 있었는데이 오류는 GHCi를 사용하여 사물을 미리 컴파일하는 Template Haskell 메커니즘의 일부 문제로 인해 발생한다고 들었습니다. 이것은 SQLite 라이브러리를 미리 컴파일하려고 할 때 정확하게 발생합니다.

그리고 나는 GHC의 새 버전 인 v7.8.x로 수정해야한다고 통보 받았습니다. (그러나 그것은 새로운 Haskell 플랫폼의 일부로 사용하기에는 아직 시간이 걸릴 것입니다).

그리고 저는 그 문제가 오래전에 거기에 있다는 것에 놀랐습니다.

+0

감사합니다.이 질문을 마치는데 꽤 오래 동안 열려 있습니다. 이 대답은 나에게 상당히 공평 해 보인다. – rturrado

1

도움이 될 수 있습니다 일부 의견 :

제로 길이의 memset 오류가 무시하는 것이 아닙니다.

알 수없는 기호 오류로 인해 기본 sqlite 라이브러리 버전이 너무 오래되었다고 말할 수 있습니다.

  • sqlite를 업데이트하거나 최적화 문제가있는 경우 gcc 버전이 너무 오래되었는지 확인하십시오.

  • cabal을 사용하는 대신 cabal-dev은 프로젝트에 sanboxed 라이브러리 데이터베이스를 제공합니다.

  • 라이브러리를 별도로 설치하는 대신 버전 종속성을 지정하는 .cabal 프로젝트 파일에 모두 나열하는 것이 좋습니다. (yesod-platform과 persistent-sqlite는 공통점이 있습니다)

건배!

2

yesod devel을 실행할 때 알 수없는 기호 오류가 발생하면 응용 프로그램의 파일에서 exposed-modules 또는 other-modules에 모듈을 포함하지 않은 경우가 많습니다.