2017-12-31 121 views
0

Immer wenn ich versuche, ein Paket mit cabal (2.0.0) auf OSX 10.12.6 und GCC 4.8.0 zu installieren, werde ich getroffen Der folgende Fehler bezüglich der Datei Stg.h aus GHC 8.2.1, der Fehler ist unglaublich kryptisch. Ich kann kein Paket unter OSX installieren.GHC/GCC Compiler-Problem __STDC_VERSION__ w/C99 von Stg.h, schlägt für jedes Paket fehl

erwartetes Verhalten:

cabal install $packagename$packagename auf OSX installieren sollten, da Kabale und Intrige installieren richtig installiert sind.

Beobachtete Verhalten:

cabal install $packagename nicht aufgrund eines Low-Level-GHC/GCC Ausgabe auf eine __STDC_VERSION__ genannt Variablen in Beziehung. Ich bin kein C-Programmierer und ich erwarte nicht, dass meine korrekte Installation von GHC und Cabal fehlschlägt, Pakete zu installieren. AFAICT dieses Problem bezieht sich nicht auf Benutzerfehler.

[email protected] git:the_D*+ ~/Projects/kata/euler>cabal update && cabal 
install optparse-applicative 
Downloading the latest package list from hackage.haskell.org 
gcc: warning: couldn’t understand kern.osversion ‘16.7.0 
gcc: warning: couldn’t understand kern.osversion ‘16.7.0 
Warning: --root-cmd is no longer supported, see 
https://github.com/haskell/cabal/issues/3353 (if you didn't type --root-cmd, 
comment out root-cmd in your ~/.cabal/config file) 
Resolving dependencies... 
Downloading transformers-compat-0.5.1.4... 
Configuring colour-2.3.4... 
Configuring transformers-compat-0.5.1.4... 
Building colour-2.3.4... 
Building transformers-compat-0.5.1.4... 
Failed to install transformers-compat-0.5.1.4 
Build log (/Users/Matthew/.cabal/logs/ghc-8.2.1/transformers-compat-0.5.1.4-HHfl4KyHCH71PMx2CRgdve.log): 
cabal: Entering directory '/var/folders/qw/k0t4r5fd5_b0phjvwtxx_n700000gq/T/cabal-tmp-91946/transformers-compat-0.5.1.4' 
Configuring transformers-compat-0.5.1.4... 
gcc: warning: couldn’t understand kern.osversion ‘16.7.0 
Preprocessing library for transformers-compat-0.5.1.4.. 
Building library for transformers-compat-0.5.1.4.. 
[1 of 2] Compiling Control.Monad.Trans.Instances (src/Control/Monad/Trans/Instances.hs, dist/build/Control/Monad/Trans/Instances.o) 
[2 of 2] Compiling Paths_transformers_compat (dist/build/autogen/Paths_transformers_compat.hs, dist/build/Paths_transformers_compat.o) 
[1 of 2] Compiling Control.Monad.Trans.Instances (src/Control/Monad/Trans/Instances.hs, dist/build/Control/Monad/Trans/Instances.p_o) 
In file included from /Library/Frameworks/GHC.framework/Versions/8.2.1-x86_64/usr/lib/ghc-8.2.1/include/Rts.h:30:0: error: 
    0, 
        from /var/folders/qw/k0t4r5fd5_b0phjvwtxx_n700000gq/T/ghc92089_0/ghc_7.c:2: 

/Library/Frameworks/GHC.framework/Versions/8.2.1-x86_64/usr/lib/ghc-8.2.1/include/Stg.h:30:3: error: 
    error: #error __STDC_VERSION__ does not advertise C99 or later 
    # error __STDC_VERSION__ does not advertise C99 or later 
    ^
    | 
30 | # error __STDC_VERSION__ does not advertise C99 or later 
    | ^
`gcc' failed in phase `C Compiler'. (Exit code: 1) 
cabal: Leaving directory '/var/folders/qw/k0t4r5fd5_b0phjvwtxx_n700000gq/T/cabal-tmp-91946/transformers-compat-0.5.1.4' 
Failed to install colour-2.3.4 
Build log (/Users/Matthew/.cabal/logs/ghc-8.2.1/colour-2.3.4-9c0ktEQZfar3Wigr5kT6BU.log): 
cabal: Entering directory '/var/folders/qw/k0t4r5fd5_b0phjvwtxx_n700000gq/T/cabal-tmp-91945/colour-2.3.4' 
Configuring colour-2.3.4... 
Preprocessing library for colour-2.3.4.. 
Building library for colour-2.3.4.. 
[ 1 of 14] Compiling Data.Colour.CIE.Chromaticity ( 
Data/Colour/CIE/Chromaticity.hs, dist/build/Data/Colour/CIE/Chromaticity.o) 
... 
[ 1 of 14] Compiling Data.Colour.CIE.Chromaticity (Data/Colour/CIE/Chromaticity.hs, dist/build/Data/Colour/CIE/Chromaticity.p_o) 

In file included from /Library/Frameworks/GHC.framework/Versions/8.2.1-x86_64/usr/lib/ghc-8.2.1/include/Rts.h:30:0: error: 
    0, 
        from /var/folders/qw/k0t4r5fd5_b0phjvwtxx_n700000gq/T/ghc92201_0/ghc_3.c:2: 

/Library/Frameworks/GHC.framework/Versions/8.2.1-x86_64/usr/lib/ghc-8.2.1/include/Stg.h:30:3: error: 
    error: #error __STDC_VERSION__ does not advertise C99 or later 
    # error __STDC_VERSION__ does not advertise C99 or later 
    ^
    | 
30 | # error __STDC_VERSION__ does not advertise C99 or later 
    | ^
`gcc' failed in phase `C Compiler'. (Exit code: 1) 
cabal: Leaving directory '/var/folders/qw/k0t4r5fd5_b0phjvwtxx_n700000gq/T/cabal-tmp-91945/colour-2.3.4' 
cabal: Error: some packages failed to install: 
ansi-terminal-0.7.1.1-3eOIKoB8mo97DkHMJ6AgBw depends on ansi-terminal-0.7.1.1 
which failed to install. 
ansi-wl-pprint-0.6.8.1-Ctcte9oFd5tFGoIV7u576g depends on 
ansi-wl-pprint-0.6.8.1 which failed to install. 
colour-2.3.4-9c0ktEQZfar3Wigr5kT6BU failed during the building phase. The 
exception was: 
ExitFailure 1 
optparse-applicative-0.14.0.0-Iaq7kOKFg2Z4XsKvk269H6 depends on 
optparse-applicative-0.14.0.0 which failed to install. 
transformers-compat-0.5.1.4-HHfl4KyHCH71PMx2CRgdve failed during the building phase. The exception was: 
ExitFailure 1 

Antwort

2

der Fehler ist unglaublich kryptische

Eigentlich sieht es ziemlich klar:

error: #error __STDC_VERSION__ does not advertise C99 or later 

Die C-Header-Datei Stg.h prüfen, ob die Compiler C99 unterstützt (die Version 1999 der Norm ISO C), unter Verwendung des Standardmakros __STDC_VERSION__. Da dies nicht entsprechend eingestellt ist, ist der Compiler nicht C99-konform, und die C-Quelle löst einen Fehler aus.

Grundsätzlich weigert sich Stg.h, mit einem C-Compiler zu kompilieren, der nicht einmal den 18 Jahre alten C-Standard unterstützt. Ganz vernünftig.

GCC 4.8 sieht tatsächlich alt aus: der neueste GCC ist 7.1. Ich würde versuchen, GCC auf eine neuere Version zu aktualisieren, wenn nicht die neueste.


Update: wie Keith Thompson unten wies darauf hin, GCC 4.8, trotz seines Alters, kann C99 unterstützen, wenn die Flagge -std=c99 geben. Es sollte eine Möglichkeit geben, cabal anzuweisen, diese Flagge an gcc weiterzugeben, aber ich kann mich nicht erinnern, wie. Es sollte eine Option wie etwa cflags dafür geben, somewhere.

+0

Da der Fehler hat nichts mit Haskell oder die Installation zu tun, würde ich argumentieren, dass der Fehler ziemlich periphere zum installierten System ist. GCC 4.2/4.8 werden routinemäßig in Unternehmenssystemen verwendet, und Versionsanforderungen werden in der Haskell-Systemdokumentation nicht erwähnt (seltene Erwähnungen finden sich im ghci-Standalone für ältere Versionen von GHC und LLVM in den neueren Standalones). 'brew upgrade gcc' und Aliasing gcc lösten das Problem. Danke @chi – W4t3randWind

+2

Es sollte nicht notwendig sein, gcc zu aktualisieren. gcc 4.8.0 wurde 2013 veröffentlicht. Es unterstützt standardmäßig C99 * nicht. Sie müssen es nur mit '-std = c99' (um C99 zu unterstützen) oder' -std = gnu99' aufrufen (um C99 mit GNU-Erweiterungen zu unterstützen). Die Standardsprache ist '-std = gnu89'. Für neuere Releases lautet der Standardwert "-std = gnu11". (Aber wenn Sie gcc sowieso aktualisiert haben, sollte das auch lösen.) –

+0

@KeithThompson Ah, richtig. Das ist ein ausgezeichneter Ratschlag. Ich kann mich nicht erinnern, wie ich Cabal davon überzeugen konnte, diese Flagge weiterzugeben, aber es sollte machbar sein. – chi

Verwandte Themen