2013-04-26 1 views
5

hier ein Stück Code, das nicht Auszeichnungen für Komplexität gewinnen:Trivial Schnipsel von F # -Code funktioniert nicht unter MONO

[<EntryPoint>] 
let main argv = 
    let i = 1I 
    printfn "One is %A\n" i 
    0 // return an integer exit code 

Es kompiliert wie folgt: „c:/Program Files (x86)/Microsoft SDKs/F #/3.0/Framework/v4.0/Fsc.exe "--out: numericstest.exe --debug: voll --target: exe --standalone Program.fs

Unter Windows produziert es das erwartete Ergebnis. Allerdings unter Mono 3.0.7 kompiliert unter Ubuntu sagt es stattdessen:

mono numericstest.exe 

Unhandled Exception: System.InvalidProgramException: Invalid IL code in System.Numerics.BigInteger:get_One(): method body is empty. 

at Program.main (System.String[] argv) [0x00000] in <filename unknown>:0[ERROR] FATAL UNHANDLED EXCEPTION: System.InvalidProgramException: Invalid IL code in System.Numerics.BigInteger:get_One(): method body is empty. 

at Program.main (System.String[] argv) [0x00000] in <filename unknown>:0 

Was mache ich bitte falsch? Danke vielmals.

Antwort

2

Es ist nichts falsch mit Ihrem Code - diese Ausnahme ist aufgrund Ihr Code sowieso. Es sieht so aus, als ob etwas mit der System.Numerics.dll Baugruppe auf Ihrem Computer nicht stimmt. Entweder wird es nicht korrekt installiert, es wird falsch kompiliert (zB vom Mono C# -Compiler), oder es gibt eine Art Weiterleitung, die nicht funktioniert wie es sein sollte, usw.

Was passiert, wenn Sie den Code ohne ausführen mit BigInteger (über das I Suffix)?


Ich habe Ihren Code in meiner Ubuntu (12.04, 32-Bit) VM unter VirtualBox ausgeführt. Der Code wurde kompiliert und wie erwartet ausgeführt. Hier ist die Ausgabe, wenn Sie wollen:

Compile/Run

[email protected]:~/Desktop$ fsharpc --out:JoeHuha.exe --debug:full --target:exe --standalone JoeHuha.fs 
F# Compiler for F# 3.0 (Open Source Edition) 
Freely distributed under the Apache 2.0 Open Source License 
[email protected]:~/Desktop$ mono JoeHuha.exe 
One is 1 

Mono-Version Info

[email protected]:~/Desktop$ mono -V 
Mono JIT compiler version 3.0.5 (master/1643364 Fri Feb 22 19:31:07 EST 2013) 
Copyright (C) 2002-2012 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com 
    TLS:   __thread 
    SIGSEGV:  altstack 
    Notifications: epoll 
    Architecture: x86 
    Disabled:  none 
    Misc:   softdebug 
    LLVM:   supported, not enabled. 
    GC:   Included Boehm (with typed GC and Parallel Mark) 
+0

Es mit einem int ganz gut funktioniert. Leider brauche ich wirklich Bigints. Es scheint sogar mit statisch verknüpftem Code zu versagen, wenn es vermutlich die korrekte Kopie von Zahlen hat (bereits eine dynamisch verknüpfte Version versucht, dasselbe Ergebnis). Ich hoffe wirklich, die ultimative Antwort wird nicht "warten bis Mono reift" –

+0

@JoeHuha - Ihr Code funktioniert gut für mich mit F # 3.0 und Mono 2.10.2. Ich denke, es gibt ein Problem mit Ihrer Installation. –

+0

Mono reift sehr gut, besonders seit Xamarin letztes Jahr von Novell abgeschnitten hat. In jedem Fall werde ich morgen deinen Code ausprobieren (wenn es nicht schon gelöst ist) und sehen, ob ich auf denselben Bug stoße. Auf diese Weise haben Sie zumindest eine bessere Vorstellung vom Umfang des Fehlers. –