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

Reply via email to