Julia 0.5 precompilation failures

157 views
Skip to first unread message

Rohit Varkey Thankachan

unread,
Oct 21, 2016, 4:56:31 PM10/21/16
to julia-users
Hi,

I've been trying to use julia on one of my university machines and having precompilation issues. The machine runs Linux x84_46 and I'm using the 0.5 generic linux binary.

I was trying to use JLD.jl and kept getting precompilation failures for HFD5. On trying to do `using HDF5` in the REPL, it was giving me the same error for Compat.jl. By running `using <module>` for all modules for which precompilation was failing when trying to use JLD(HDF5->(Compat, Blosc), FileIO) I got them all precompiled successfully. However JLD also needed LegacyStrings to be precompiled, which does not have precompilation enabled and has to be precompiled from another module. At which point I was stuck and I decided to just go with `julia --compilecache=no`.

julia> using JLD
INFO: Precompiling module JLD.
ERROR: LoadError: LoadError: Failed to precompile LegacyStrings to /nethome/rvt7/.julia/lib/v0.5/LegacyStrings.ji.
 in compilecache(::String) at ./loading.jl:593
 in require(::Symbol) at ./loading.jl:393
 in include_from_node1(::String) at ./loading.jl:488 (repeats 2 times)
 in macro expansion; at ./none:2 [inlined]
 in anonymous at ./<missing>:?
 in eval(::Module, ::Any) at ./boot.jl:234
 in process_options(::Base.JLOptions) at ./client.jl:239
 in _start() at ./client.jl:318
while loading /nethome/rvt7/.julia/v0.5/JLD/src/jld_types.jl, in expression starting on line 1
while loading /nethome/rvt7/.julia/v0.5/JLD/src/JLD.jl, in expression starting on line 130
ERROR: Failed to precompile JLD to /nethome/rvt7/.julia/lib/v0.5/JLD.ji.
 in compilecache(::String) at ./loading.jl:593
 in require(::Symbol) at ./loading.jl:422

julia> using LegacyStrings
WARNING: could not import Base.lastidx into LegacyStrings
WARNING: using LegacyStrings.utf8 in module Main conflicts with an existing identifier.
WARNING: using LegacyStrings.ascii in module Main conflicts with an existing identifier.

julia> using JLD
INFO: Precompiling module JLD.
WARNING: Module LegacyStrings with uuid 25677385416258011 is missing from the cache.
This may mean module LegacyStrings does not support precompilation but is imported by a module that does.
ERROR: LoadError: LoadError: Declaring __precompile__(false) is not allowed in files that are being precompiled.
 in require(::Symbol) at ./loading.jl:385
 in include_from_node1(::String) at ./loading.jl:488 (repeats 2 times)
 in macro expansion; at ./none:2 [inlined]
 in anonymous at ./<missing>:?
 in eval(::Module, ::Any) at ./boot.jl:234
 in process_options(::Base.JLOptions) at ./client.jl:239
 in _start() at ./client.jl:318
while loading /nethome/rvt7/.julia/v0.5/JLD/src/jld_types.jl, in expression starting on line 1
while loading /nethome/rvt7/.julia/v0.5/JLD/src/JLD.jl, in expression starting on line 130
ERROR: Failed to precompile JLD to /nethome/rvt7/.julia/lib/v0.5/JLD.ji.
 in compilecache(::String) at ./loading.jl:593
 in require(::Symbol) at ./loading.jl:422

On a hunch that this was occurring due to a package with precompilation enabled trying to use another precompilation enabled package which hadn't been precompiled yet, I tried making a minimal example to check this. I created 2 packages Foo and Bar, both of which have precompilation enabled.
 
~/.julia/v0.5/Foo/Foo.jl:
module Foo

__precompile__()
using Bar

import Bar: bar

end

~/.julia/v0.5/Bar/src/Bar.jl:

module Bar

__precompile__()

export bar

const bar = "foo"

end

Now when I try using Foo, I get a precompilation failed error for Bar. Foo does precompile when Bar is already precompiled though!

               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: http://docs.julialang.org
   _ _   _| |_  __ _   |  Type "?help" for help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.5.0 (2016-09-19 18:14 UTC)
 _/ |\__'_|_|_|\__'_|  |  Official http://julialang.org/ release
|__/                   |  x86_64-pc-linux-gnu

julia> using Foo
INFO: Precompiling module Foo.
ERROR: LoadError: Failed to precompile Bar to /nethome/rvt7/.julia/lib/v0.5/Bar.ji.
 in compilecache(::String) at ./loading.jl:593
 in require(::Symbol) at ./loading.jl:393
 in include_from_node1(::String) at ./loading.jl:488
 in macro expansion; at ./none:2 [inlined]
 in anonymous at ./<missing>:?
 in eval(::Module, ::Any) at ./boot.jl:234
 in process_options(::Base.JLOptions) at ./client.jl:239
 in _start() at ./client.jl:318
while loading /nethome/rvt7/.julia/v0.5/Foo/src/Foo.jl, in expression starting on line 4
ERROR: Failed to precompile Foo to /nethome/rvt7/.julia/lib/v0.5/Foo.ji.
 in compilecache(::String) at ./loading.jl:593
 in require(::Symbol) at ./loading.jl:422

julia> using Bar
INFO: Precompiling module Bar.
WARNING: replacing module Bar.

julia> reload("Foo")
WARNING: replacing module Foo
INFO: Precompiling module Foo.
WARNING: replacing module Foo.

julia> versioninfo()
Julia Version 0.5.0
Commit 3c9d753 (2016-09-19 18:14 UTC)
Platform Info:
  System: Linux (x86_64-pc-linux-gnu)
  CPU: Intel(R) Xeon(R) CPU           X5650  @ 2.67GHz
  WORD_SIZE: 64
  BLAS: libopenblas (USE64BITINT DYNAMIC_ARCH NO_AFFINITY Nehalem)
  LAPACK: libopenblas64_
  LIBM: libopenlibm
  LLVM: libLLVM-3.7.1 (ORCJIT, westmere)

Any ideas why this might be occurring?

Thanks,
Rohit

Michele Zaffalon

unread,
Oct 21, 2016, 5:23:16 PM10/21/16
to julia...@googlegroups.com
I am not sure if this is the reason, but the manual (http://docs.julialang.org/en/release-0.5/manual/modules/) says you should put _precompile_() before the module starts.

Rohit Varkey Thankachan

unread,
Oct 21, 2016, 5:56:37 PM10/21/16
to julia-users
Oops! Thanks!

I put __precompile__() before the module definitions in both Foo.jl and Bar.jl. The problem is still there though. 

- Rohit
Reply all
Reply to author
Forward
0 new messages