„Kann nicht 4 Byte Verlagerung unterzeichnet haben“ auf der Kompilierung
-
10-07-2019 - |
Frage
Ich werde durch die reale Welt Haskell , und kam zu dem Beispiel:
-- file: ch04/InteractWith.hs
-- Save this in a source file, e.g. Interact.hs
import System.Environment (getArgs)
interactWith function inputFile outputFile = do
input <- readFile inputFile
writeFile outputFile (function input)
main = mainWith myFunction
where mainWith function = do
args <- getArgs
case args of
[input,output] -> interactWith function input output
_ -> putStrLn "error: exactly two arguments needed"
-- replace "id" with the name of our function below
myFunction = id
Aber wenn ich versuche, es zu kompilieren (ghc --make InteractWith
) ich diesen Fehler:
$ ghc --make InteractWith
[1 of 1] Compiling Main ( InteractWith.hs, InteractWith.o )
/var/folders/38/38dlZO7fEXyCgGIFUZA0Ok+++TI/-Tmp-/ghc91310_0/ghc91310_0.s:309:0:
suffix or operands invalid for `push'
/var/folders/38/38dlZO7fEXyCgGIFUZA0Ok+++TI/-Tmp-/ghc91310_0/ghc91310_0.s:358:0:
suffix or operands invalid for `push'
/var/folders/38/38dlZO7fEXyCgGIFUZA0Ok+++TI/-Tmp-/ghc91310_0/ghc91310_0.s:384:0:
32-bit absolute addressing is not supported for x86-64
/var/folders/38/38dlZO7fEXyCgGIFUZA0Ok+++TI/-Tmp-/ghc91310_0/ghc91310_0.s:384:0:
cannot do signed 4 byte relocation
/var/folders/38/38dlZO7fEXyCgGIFUZA0Ok+++TI/-Tmp-/ghc91310_0/ghc91310_0.s:387:0:
32-bit absolute addressing is not supported for x86-64
/var/folders/38/38dlZO7fEXyCgGIFUZA0Ok+++TI/-Tmp-/ghc91310_0/ghc91310_0.s:387:0:
cannot do signed 4 byte relocation
Ich bin mit GHC 6.10.4 auf Mac OS 10.6 (Snow Leopard).
Lösung
Ich habe ähnliche Probleme fast alles in Snow Leopard kompilieren. Die Lösung war ich fand den Inhalt /usr/bin/ghc
zu ersetzen (was ist eigentlich nur ein Shell-Skript) mit dem folgenden:
#!/bin/sh
exec /Library/Frameworks/GHC.framework/Versions/610/usr/lib/ghc-6.10.4/ghc -B/Library/Frameworks/GHC.framework/Versions/610/usr/lib/ghc-6.10.4/. -optc-m32 -opta-m32 -optl-m32 -dynload wrapped ${1+"$@"}
Ich denke, es ist eigentlich nur das Hinzufügen -optc-m32 -opta-m32 -optl-m32
aber ich kann mich nicht erinnern ...
(Ich fand ursprünglich diese irgendwo auf dem internets, aber ich weiß nicht mehr, wo. Es hat mich auch eine Weile dauerte.)
Andere Tipps
Haben Sie auf Snow Leopard aktualisiert vor kurzem? Ich glaube, das passiert, wenn Sie versuchen, eine ausführbare Datei in Snow Leopard zu verwenden, die mit Leopard gebaut wurde.