2015-12-08 13 views
9

Zauważyłem, że wersja 0.4. * Julia ma opcję --compile.Jak skompilować skrypt julia?

O dziwo, nie mogę znaleźć żadnej dokumentacji na ten temat.

Próbowałem (w Ubuntu), aby skompilować skrypt julia do wykonywanego pliku bajtowego LLVM. Ale aż tutaj, nie udało mi się:

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

ja też może się ten komunikat o błędzie:

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

Ten błąd nie pojawia się już, jeśli mogę umieścić plik boot.jl w tym samym folderze.

Co należy zrobić, aby skompilować skrypt julia do kodu wykonywalnego/zaciemnionego kodu bajtowego?

Edit: FYI, mój plik test.jl zawiera tylko print(123)

Odpowiedz

11

Oto przykład, ze źródła julia budować na OS X, z /tmp/test.jl jak:

function foo() 
    print(123) 
end 

precompile(foo,()) 

I julia/base/userimg.jl jako include("/tmp/test.jl")

wykonać następujące czynności wewnątrz katalogu julia/base:

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

Następnie uruchom llvm-dis test.bc -o test.ll. Gdzieś w obrazie (ogromnego) mamy odpowiedniego kodu bajtowego dla funkcji Test:

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

Powiedział, że jak na razie (grudnia 2015), Julia nie nadaje się do zestawiania stand- naprzód-of-time same pliki wykonywalne. Jednak następujące mogą być interesujące:

+1

Dziękuję Ci. Kiedy próbuję wykonać plik '.bc'. Mówi, że brakuje funkcji "głównej". Nawet jeśli umieściłem główną funkcję w moim pliku źródłowym ... – Oli

+0

Zobacz link do BuildExecutable. Najpierw musisz coś z tym zrobić, a następnie zmodyfikuj go, aby używał flagi '--output-bc'. –