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.
On Fri, Oct 21, 2016 at 10:56 PM, Rohit Varkey Thankachan < rohitvar...@gmail.com> wrote: > 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 > >