2015-12-08 15 views
9

Ho notato che la versione 0.4. * Di julia ha un'opzione --compile.Come compilare uno script julia?

Stranamente, non riesco a trovare alcuna documentazione a riguardo.

Stavo cercando (in Ubuntu), di compilare uno script julia in un file bytecode LLVM eseguibile. Ma fino a qui, non sono riuscito:

julia --compile=yes --output-bc test.bc test.jl 
Segmentation fault (core dumped) 

anche io posso ottenere questo messaggio di errore:

julia --compile=yes --output-bc test.bc test.jl 
ERROR: could not open file boot.jl 

Questo errore non compare più, se ho messo un file boot.jl nella stessa cartella.

Come devo fare per compilare uno script julia su un bytecode eseguibile/offuscato?

Edit: Cordiali saluti, il mio file test.jl contiene solo print(123)

risposta

11

Ecco un esempio, da una fonte julia costruire su OS X, con /tmp/test.jl come:

function foo() 
    print(123) 
end 

precompile(foo,()) 

E julia/base/userimg.jl come include("/tmp/test.jl")

Eseguire il seguente all'interno del julia/base directory:

julia --compile=yes --output-bc test.bc -J ../usr/lib/julia/inference.ji sysimg.jl 

Quindi eseguire llvm-dis test.bc -o test.ll. Da qualche parte l'immagine (enorme) in abbiamo il bytecode rilevanti per la funzione di test:

define internal %jl_value_t* @julia_foo_22542() { 
top: 
    %0 = alloca [4 x %jl_value_t*], align 8, !dbg !51528 
... 

Detto questo, fin d'ora (dicembre 2015), Julia non è utilizzabile per ahead-of-time compilazione di stand- solo eseguibili. Tuttavia, possono essere interessanti:

+1

Grazie. Quando provo ad eseguire il file '.bc'. Dice che manca la funzione 'main'. Anche se inserisco una funzione principale nel mio file sorgente ... – Oli

+0

Vedere il collegamento a BuildExecutable. Ottieni prima qualcosa con cui lavorare, quindi modificalo per usare il flag '--output-bc'. –