2013-04-26 14 views
5

Ecco un po 'di codice che non vincerà premi per la complessità:Trivial frammento di codice F # non funziona sotto MONO

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

E' compilato nel modo seguente: "c:/Program Files (x86)/Microsoft SDK/F #/3.0/Framework/v4.0/Fsc.exe "--out: numericstest.exe --debug: completo --target: exe --standalone Program.fs

In Windows produce l'attesa risultato. Tuttavia sotto Mono 3.0.7 compilato sotto Ubuntu si dice invece:

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 

Cosa faccio di sbagliato per favore? Grazie molto.

risposta

2

Non c'è niente di sbagliato nel codice: quell'eccezione è dovuta allo codice. Sembra che ci sia qualcosa di sbagliato nell'assemblaggio System.Numerics.dll sulla tua macchina; o non è installato correttamente, si sta compilando in modo errato (ad esempio, dal compilatore Mono C#), o sta facendo un tipo di inoltro di tipo che non funziona come dovrebbe, ecc.

Cosa succede se si esegue il codice senza utilizzando BigInteger (tramite il suffisso I)?


ho provato il codice nel mio Ubuntu (12.04, 32-bit) VM in esecuzione in VirtualBox. Il codice è stato compilato e eseguito come previsto. Ecco l'output se si desidera:

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 versione informazioni

[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

Funziona bene con un int. Sfortunatamente, ho davvero bisogno di bigints. Sembra fallire anche con codice collegato staticamente quando presumibilmente ha la copia corretta dei numeri (già provato una versione collegata in modo dinamico, stesso risultato). Spero davvero che la risposta definitiva non sia "aspetta che Mono maturi" –

+0

@JoeHuha - Il tuo codice funziona bene per me con F # 3.0 e mono 2.10.2. Penso che ci sia un problema con la tua installazione. –

+0

Mono sta maturando abbastanza bene, specialmente da quando Xamarin è stato tagliato da Novell l'anno scorso. In ogni caso, proverò il tuo codice domani (se non è già stato risolto) e vedrò se mi imbatto nello stesso bug. Almeno così avrai un'idea migliore dell'ambito del bug. –

Problemi correlati