1

まず第一に、カバール xD で私の災害を解決するために私を連れてきてくれてありがとう...

OS X El Capitan 10.11.3、64 ビットで作業しています。

特にghc 7.6.3で作業する必要があるため、2013.2.0.0のhttps://www.haskell.org/platform/prior.htmlからHaskellプラットフォームをインストールしました。

それから cabal update を実行すると...頭痛が始まります...

Resolving dependencies...
Configuring binary-0.8.2.0...

/var/folders/3l/wflf71t55t92rrvt8lhx_8700000gn/T/10157.c:1:12:
     warning: control reaches end of non-void function [-Wreturn-type]
int foo() {}
           ^
1 warning generated.
Building binary-0.8.2.0...
Preprocessing library binary-0.8.2.0...

src/Data/Binary.hs:198:43:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- This is just a convenience function, it's defined simply as:
                                          ^

src/Data/Binary.hs:253:35:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- This mechanism makes use of GHC's efficient built-in generics
                                  ^
2 warnings generated.

src/Data/Binary/Put.hs:110:26:
     warning: missing terminating ' character [-Winvalid-pp-token]
                    PairS x w' = unPut k
                             ^

src/Data/Binary/Put.hs:111:42:
     warning: missing terminating ' character [-Winvalid-pp-token]
                in PairS (f x) (w `mappend` w')
                                             ^

src/Data/Binary/Put.hs:115:26:
     warning: missing terminating ' character [-Winvalid-pp-token]
                    PairS b w' = unPut k
                             ^

src/Data/Binary/Put.hs:116:38:
     warning: missing terminating ' character [-Winvalid-pp-token]
                in PairS b (w `mappend` w')
                                         ^

src/Data/Binary/Put.hs:123:22:
     warning: missing terminating ' character [-Winvalid-pp-token]
                PairS b w' = unPut (k a)
                         ^

src/Data/Binary/Put.hs:124:34:
     warning: missing terminating ' character [-Winvalid-pp-token]
            in PairS b (w `mappend` w')
                                     ^

src/Data/Binary/Put.hs:257:64:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- written in host order, host endian form, for the machine you're on.
                                                               ^

src/Data/Binary/Put.hs:286:64:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- written in host order, host endian form, for the machine you're on.
                                                               ^
8 warnings generated.

src/Data/Binary/Get.hs:26:7:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- Let's decode binary data representing illustrated here.
      ^

src/Data/Binary/Get.hs:43:71:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- The fields in @Trade@ are marked as strict (using @!@) since we don't need
                                                                      ^

src/Data/Binary/Get.hs:48:12:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- Now, let's have a look at a decoder for this format.
           ^

src/Data/Binary/Get.hs:62:20:
     warning: missing terminating ' character [-Winvalid-pp-token]
--getTrade' :: 'Get' Trade
                   ^

src/Data/Binary/Get.hs:63:79:
     warning: missing terminating ' character [-Winvalid-pp-token]
--getTrade' = Trade '<$>' 'getWord32le' '<*>' 'getWord32le' '<*>' 'getWord16le'
                                                                              ^

src/Data/Binary/Get.hs:70:7:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- Let's first define a function that decodes many @Trade@s.
      ^

src/Data/Binary/Get.hs:88:27:
     warning: missing terminating '"' character [-Winvalid-pp-token]
--  input <- BL.readFile \"trades.bin\"
                          ^

src/Data/Binary/Get.hs:235:64:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- The lazy interface consumes a single lazy 'L.ByteString'. It's the easiest
                                                               ^

src/Data/Binary/Get.hs:236:47:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- interface to get started with, but it doesn't support interleaving I\/O and
                                              ^

src/Data/Binary/Get.hs:298:23:
     warning: missing terminating ' character [-Winvalid-pp-token]
runGetState g lbs0 pos' = go (runGetIncremental g) lbs0
                      ^

src/Data/Binary/Get.hs:300:53:
     warning: missing terminating ' character [-Winvalid-pp-token]
      go (Done s pos a) lbs = (a, L.chunk s lbs, pos+pos')
                                                        ^

src/Data/Binary/Get.hs:570:53:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- host order, host endian form, for the machine you're on. On a 64 bit
                                                    ^
12 warnings generated.

src/Data/Binary/Get/Internal.hs:157:22:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- | Make sure we don't have to pass Nothing to a Partial twice.
                     ^

src/Data/Binary/Get/Internal.hs:158:19:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- This way we don't need to pass around an EOF value in the Get monad, it
                  ^

src/Data/Binary/Get/Internal.hs:180:63:
     warning: missing terminating ' character [-Winvalid-pp-token]
prompt inp kf ks = prompt' kf (\inp' -> ks (inp `B.append` inp'))
                                                              ^

src/Data/Binary/Get/Internal.hs:182:7:
     warning: missing terminating ' character [-Winvalid-pp-token]
prompt' :: Decoder a -> (B.ByteString -> Decoder a) -> Decoder a
      ^

src/Data/Binary/Get/Internal.hs:183:7:
     warning: missing terminating ' character [-Winvalid-pp-token]
prompt' kf ks =
      ^

src/Data/Binary/Get/Internal.hs:221:21:
     warning: missing terminating ' character [-Winvalid-pp-token]
                let (inp', out) = B.splitAt n str
                        ^

src/Data/Binary/Get/Internal.hs:222:31:
     warning: missing terminating ' character [-Winvalid-pp-token]
                in k out (Just inp')
                                  ^

src/Data/Binary/Get/Internal.hs:240:17:
     warning: missing terminating ' character [-Winvalid-pp-token]
          Left state' -> do
                    ^

src/Data/Binary/Get/Internal.hs:241:16:
     warning: missing terminating ' character [-Winvalid-pp-token]
            let acc' = inp : acc
                   ^

src/Data/Binary/Get/Internal.hs:242:15:
     warning: missing terminating ' character [-Winvalid-pp-token]
            prompt'
                  ^

src/Data/Binary/Get/Internal.hs:243:40:
     warning: missing terminating ' character [-Winvalid-pp-token]
              (runCont (onFail (reverse acc')) B.empty ks)
                                           ^

src/Data/Binary/Get/Internal.hs:284:72:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- Once it's finished, return the final decoder (always 'Done' or 'Fail'),
                                                                       ^

src/Data/Binary/Get/Internal.hs:327:8:
     warning: missing terminating ' character [-Winvalid-pp-token]
      let g' = maybe (Left ()) Right <$> g
           ^

src/Data/Binary/Get/Internal.hs:328:47:
     warning: missing terminating ' character [-Winvalid-pp-token]
      either (const Nothing) Just <$> lookAheadE g'
                                                  ^

src/Data/Binary/Get/Internal.hs:403:3:
     error: invalid preprocessing directive
     #-}
      ^

src/Data/Binary/Get/Internal.hs:412:64:
     warning: missing terminating ' character [-Winvalid-pp-token]
      where -- might look a bit funny, but plays very well with GHC's inliner.
                                                                   ^

src/Data/Binary/Get/Internal.hs:413:19:
     warning: missing terminating ' character [-Winvalid-pp-token]
            -- GHC won't inline recursive functions, so we make ensureN non-recursive
                      ^
16 warnings and 1 error generated.
Failed to install binary-0.8.2.0
cabal: Error: some packages failed to install:
Cabal-1.22.7.0 depends on binary-0.8.2.0 which failed to install.
binary-0.8.2.0 failed during the building phase. The exception was:
ExitFailure 1
cabal-install-1.22.8.0 depends on binary-0.8.2.0 which failed to install.

そして...バイナリをインストールしてみます...

Resolving dependencies...
Configuring binary-0.8.2.0...

/var/folders/3l/wflf71t55t92rrvt8lhx_8700000gn/T/10204.c:1:12:
     warning: control reaches end of non-void function [-Wreturn-type]
int foo() {}
           ^
1 warning generated.
Building binary-0.8.2.0...
Preprocessing library binary-0.8.2.0...

src/Data/Binary.hs:198:43:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- This is just a convenience function, it's defined simply as:
                                          ^

src/Data/Binary.hs:253:35:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- This mechanism makes use of GHC's efficient built-in generics
                                  ^
2 warnings generated.

src/Data/Binary/Put.hs:110:26:
     warning: missing terminating ' character [-Winvalid-pp-token]
                    PairS x w' = unPut k
                             ^

src/Data/Binary/Put.hs:111:42:
     warning: missing terminating ' character [-Winvalid-pp-token]
                in PairS (f x) (w `mappend` w')
                                             ^

src/Data/Binary/Put.hs:115:26:
     warning: missing terminating ' character [-Winvalid-pp-token]
                    PairS b w' = unPut k
                             ^

src/Data/Binary/Put.hs:116:38:
     warning: missing terminating ' character [-Winvalid-pp-token]
                in PairS b (w `mappend` w')
                                         ^

src/Data/Binary/Put.hs:123:22:
     warning: missing terminating ' character [-Winvalid-pp-token]
                PairS b w' = unPut (k a)
                         ^

src/Data/Binary/Put.hs:124:34:
     warning: missing terminating ' character [-Winvalid-pp-token]
            in PairS b (w `mappend` w')
                                     ^

src/Data/Binary/Put.hs:257:64:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- written in host order, host endian form, for the machine you're on.
                                                               ^

src/Data/Binary/Put.hs:286:64:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- written in host order, host endian form, for the machine you're on.
                                                               ^
8 warnings generated.

src/Data/Binary/Get.hs:26:7:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- Let's decode binary data representing illustrated here.
      ^

src/Data/Binary/Get.hs:43:71:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- The fields in @Trade@ are marked as strict (using @!@) since we don't need
                                                                      ^

src/Data/Binary/Get.hs:48:12:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- Now, let's have a look at a decoder for this format.
           ^

src/Data/Binary/Get.hs:62:20:
     warning: missing terminating ' character [-Winvalid-pp-token]
--getTrade' :: 'Get' Trade
                   ^

src/Data/Binary/Get.hs:63:79:
     warning: missing terminating ' character [-Winvalid-pp-token]
--getTrade' = Trade '<$>' 'getWord32le' '<*>' 'getWord32le' '<*>' 'getWord16le'
                                                                              ^

src/Data/Binary/Get.hs:70:7:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- Let's first define a function that decodes many @Trade@s.
      ^

src/Data/Binary/Get.hs:88:27:
     warning: missing terminating '"' character [-Winvalid-pp-token]
--  input <- BL.readFile \"trades.bin\"
                          ^

src/Data/Binary/Get.hs:235:64:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- The lazy interface consumes a single lazy 'L.ByteString'. It's the easiest
                                                               ^

src/Data/Binary/Get.hs:236:47:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- interface to get started with, but it doesn't support interleaving I\/O and
                                              ^

src/Data/Binary/Get.hs:298:23:
     warning: missing terminating ' character [-Winvalid-pp-token]
runGetState g lbs0 pos' = go (runGetIncremental g) lbs0
                      ^

src/Data/Binary/Get.hs:300:53:
     warning: missing terminating ' character [-Winvalid-pp-token]
      go (Done s pos a) lbs = (a, L.chunk s lbs, pos+pos')
                                                        ^

src/Data/Binary/Get.hs:570:53:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- host order, host endian form, for the machine you're on. On a 64 bit
                                                    ^
12 warnings generated.

src/Data/Binary/Get/Internal.hs:157:22:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- | Make sure we don't have to pass Nothing to a Partial twice.
                     ^

src/Data/Binary/Get/Internal.hs:158:19:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- This way we don't need to pass around an EOF value in the Get monad, it
                  ^

src/Data/Binary/Get/Internal.hs:180:63:
     warning: missing terminating ' character [-Winvalid-pp-token]
prompt inp kf ks = prompt' kf (\inp' -> ks (inp `B.append` inp'))
                                                              ^

src/Data/Binary/Get/Internal.hs:182:7:
     warning: missing terminating ' character [-Winvalid-pp-token]
prompt' :: Decoder a -> (B.ByteString -> Decoder a) -> Decoder a
      ^

src/Data/Binary/Get/Internal.hs:183:7:
     warning: missing terminating ' character [-Winvalid-pp-token]
prompt' kf ks =
      ^

src/Data/Binary/Get/Internal.hs:221:21:
     warning: missing terminating ' character [-Winvalid-pp-token]
                let (inp', out) = B.splitAt n str
                        ^

src/Data/Binary/Get/Internal.hs:222:31:
     warning: missing terminating ' character [-Winvalid-pp-token]
                in k out (Just inp')
                                  ^

src/Data/Binary/Get/Internal.hs:240:17:
     warning: missing terminating ' character [-Winvalid-pp-token]
          Left state' -> do
                    ^

src/Data/Binary/Get/Internal.hs:241:16:
     warning: missing terminating ' character [-Winvalid-pp-token]
            let acc' = inp : acc
                   ^

src/Data/Binary/Get/Internal.hs:242:15:
     warning: missing terminating ' character [-Winvalid-pp-token]
            prompt'
                  ^

src/Data/Binary/Get/Internal.hs:243:40:
     warning: missing terminating ' character [-Winvalid-pp-token]
              (runCont (onFail (reverse acc')) B.empty ks)
                                           ^

src/Data/Binary/Get/Internal.hs:284:72:
     warning: missing terminating ' character [-Winvalid-pp-token]
-- Once it's finished, return the final decoder (always 'Done' or 'Fail'),
                                                                       ^

src/Data/Binary/Get/Internal.hs:327:8:
     warning: missing terminating ' character [-Winvalid-pp-token]
      let g' = maybe (Left ()) Right <$> g
           ^

src/Data/Binary/Get/Internal.hs:328:47:
     warning: missing terminating ' character [-Winvalid-pp-token]
      either (const Nothing) Just <$> lookAheadE g'
                                                  ^

src/Data/Binary/Get/Internal.hs:403:3:
     error: invalid preprocessing directive
     #-}
      ^

src/Data/Binary/Get/Internal.hs:412:64:
     warning: missing terminating ' character [-Winvalid-pp-token]
      where -- might look a bit funny, but plays very well with GHC's inliner.
                                                                   ^

src/Data/Binary/Get/Internal.hs:413:19:
     warning: missing terminating ' character [-Winvalid-pp-token]
            -- GHC won't inline recursive functions, so we make ensureN non-recursive
                      ^
16 warnings and 1 error generated.
Failed to install binary-0.8.2.0
cabal: Error: some packages failed to install:
binary-0.8.2.0 failed during the building phase. The exception was:
ExitFailure 1
  • 私の ghc --version は The Glorious Glasgow Haskell Compilation System、バージョン 7.6.3 です。

  • my cabal --version は 、Cabal ライブラリのバージョン 1.16.0 を使用して cabal-install バージョン 1.16.0.2 です。

注目してくれてありがとう。

4

3 に答える 3

2

これはバイナリ 0.8.2.0 の単なるバグです。

src/Data/Binary/Get/Internal.hs:403:3:
     error: invalid preprocessing directive
     #-}
      ^

src/Data/Binary/Get/Internal.hs#には、 clang の C プリプロセッサが好まないで始まる行があります。gcc はそれで問題ありませんが、Mac では Apple の gcc は本当にガタガタします。

その行は、12 月 20 日にリリースされた binary-0.8.0.0で新しく追加されました。まだ奇妙なことに、まだ誰もこれに遭遇していないようです。

問題を提出しました。

于 2016-02-08T18:05:33.890 に答える
0

結論として、古いバージョンの GHC 7.6.3 で最新バージョンの cabal 1.22.07 を使用することはできません。

これはバイナリ 0.8.2.0 の単なるバグです。

src/Data/Binary/Get/Internal.hs:403:3:
 error: invalid preprocessing directive
 #-}
  ^

src/Data/Binary/Get/Internal.hs には、clang の C プリプロセッサが好まない # で始まる行があります。gcc はそれで問題ありませんが、Mac では Apple の gcc は本当にガタガタします。

リード・バートン

そして知っておくべき重要なこと...

GHC は CPP に clang を使用しますが、clang はその入力についてあまり理解していません。新しい GHC にはこの問題がありません。これが、これまで発見も修正もされていない理由を説明しています。

この問題はgithub で報告されました。

L.コルモーディン

ご回答ありがとうございます。

PD: Debian を使って GHC 7.6.3 と Cabal 1.22.07 をインストールできました... >.<

于 2016-02-11T01:28:51.830 に答える
0

これは、最新のclang(最新のMac OS Xに付属)で古いGHCバージョンを使用した結果です。GHC は CPP に clang を使用しますが、clang はその入力についてあまり理解していません。

新しい GHC にはこの問題がありません。これが、これまで発見も修正もされていない理由を説明しています。

この問題はgithub で報告されました。私はそれを修正してプッシュしbinary-0.8.2.1ました。実行cabal updateして再試行してください。

で他の問題が発生した場合はお知らせbinaryください。

于 2016-02-08T21:21:16.613 に答える