Issues installing plotting packages (due to FFMPEG / Cairo?)

For example, installing Makie gives me this:

julia> import Makie
[ Info: Precompiling Makie [ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a]
ERROR: LoadError: InitError: could not load library “C:\Users\olofs.julia\artifacts\3aff78028a0bb2ad40ebc3ae7e465a52dcbe2730\bin\libcairo-2.dll”
The specified module could not be found.
Stacktrace:
[1] dlopen(s::String, flags::UInt32; throw_error::Bool)
@ Base.Libc.Libdl .\libdl.jl:117
[2] dlopen(s::String, flags::UInt32)
@ Base.Libc.Libdl .\libdl.jl:116
[3] macro expansion
@ C:\Users\olofs.julia\packages\JLLWrappers\QpMQW\src\products\library_generators.jl:54 [inlined]
[4] init()
@ Cairo_jll C:\Users\olofs.julia\packages\Cairo_jll\HW4xi\src\wrappers\x86_64-w64-mingw32.jl:18
[5] _include_from_serialized(pkg::Base.PkgId, path::String, depmods::Vector{Any})
@ Base .\loading.jl:831
[6] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String, build_id::UInt64)
@ Base .\loading.jl:1039
[7] _require(pkg::Base.PkgId)
@ Base .\loading.jl:1315
[8] _require_prelocked(uuidkey::Base.PkgId)
@ Base .\loading.jl:1200
[9] macro expansion
@ .\loading.jl:1180 [inlined]
[10] macro expansion
@ .\lock.jl:223 [inlined]
[11] require(into::Module, mod::Symbol)
@ Base .\loading.jl:1144
[12] include(mod::Module, _path::String)
@ Base .\Base.jl:419
[13] top-level scope
@ C:\Users\olofs.julia\packages\JLLWrappers\QpMQW\src\toplevel_generators.jl:188
[14] include
@ .\Base.jl:419 [inlined]
[15] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt64}}, source::String)
@ Base .\loading.jl:1554
[16] top-level scope
@ stdin:1
during initialization of module Cairo_jll
in expression starting at C:\Users\olofs.julia\packages\HarfBuzz_jll\zavaV\src\wrappers\x86_64-w64-mingw32.jl:4
in expression starting at C:\Users\olofs.julia\packages\HarfBuzz_jll\zavaV\src\HarfBuzz_jll.jl:2
in expression starting at stdin:1
ERROR: LoadError: Failed to precompile HarfBuzz_jll [2e76f6c2-a576-52d4-95c1-20adfe4de566] to C:\Users\olofs.julia\compiled\v1.8\HarfBuzz_jll\jl_6A1.tmp.
Stacktrace:
[1] error(s::String)
@ Base .\error.jl:35
[2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
@ Base .\loading.jl:1707
[3] compilecache
@ .\loading.jl:1651 [inlined]
[4] _require(pkg::Base.PkgId)
@ Base .\loading.jl:1337
[5] _require_prelocked(uuidkey::Base.PkgId)
@ Base .\loading.jl:1200
[6] macro expansion
@ .\loading.jl:1180 [inlined]
[7] macro expansion
@ .\lock.jl:223 [inlined]
[8] require(into::Module, mod::Symbol)
@ Base .\loading.jl:1144
[9] include(mod::Module, _path::String)
@ Base .\Base.jl:419
[10] top-level scope
@ C:\Users\olofs.julia\packages\JLLWrappers\QpMQW\src\toplevel_generators.jl:188
[11] include
@ .\Base.jl:419 [inlined]
[12] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt64}}, source::String)
@ Base .\loading.jl:1554
[13] top-level scope
@ stdin:1
in expression starting at C:\Users\olofs.julia\packages\libass_jll\SaaQW\src\wrappers\x86_64-w64-mingw32.jl:6
in expression starting at C:\Users\olofs.julia\packages\libass_jll\SaaQW\src\libass_jll.jl:2
in expression starting at stdin:1
ERROR: LoadError: Failed to precompile libass_jll [0ac62f75-1d6f-5e53-bd7c-93b484bb37c0] to C:\Users\olofs.julia\compiled\v1.8\libass_jll\jl_2D8.tmp.
Stacktrace:
[1] error(s::String)
@ Base .\error.jl:35
[2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
@ Base .\loading.jl:1707
[3] compilecache
@ .\loading.jl:1651 [inlined]
[4] _require(pkg::Base.PkgId)
@ Base .\loading.jl:1337
[5] _require_prelocked(uuidkey::Base.PkgId)
@ Base .\loading.jl:1200
[6] macro expansion
@ .\loading.jl:1180 [inlined]
[7] macro expansion
@ .\lock.jl:223 [inlined]
[8] require(into::Module, mod::Symbol)
@ Base .\loading.jl:1144
[9] include(mod::Module, _path::String)
@ Base .\Base.jl:419
[10] top-level scope
@ C:\Users\olofs.julia\packages\JLLWrappers\QpMQW\src\toplevel_generators.jl:188
[11] include
@ .\Base.jl:419 [inlined]
[12] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt64}}, source::String)
@ Base .\loading.jl:1554
[13] top-level scope
@ stdin:1
in expression starting at C:\Users\olofs.julia\packages\FFMPEG_jll\OCtN5\src\wrappers\x86_64-w64-mingw32.jl:4
in expression starting at C:\Users\olofs.julia\packages\FFMPEG_jll\OCtN5\src\FFMPEG_jll.jl:2
in expression starting at stdin:1
ERROR: LoadError: Failed to precompile FFMPEG_jll [b22a6f82-2f65-5046-a5b2-351ab43fb4e5] to C:\Users\olofs.julia\compiled\v1.8\FFMPEG_jll\jl_FDF6.tmp.
Stacktrace:
[1] error(s::String)
@ Base .\error.jl:35
[2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
@ Base .\loading.jl:1707
[3] compilecache
@ .\loading.jl:1651 [inlined]
[4] _require(pkg::Base.PkgId)
@ Base .\loading.jl:1337
[5] _require_prelocked(uuidkey::Base.PkgId)
@ Base .\loading.jl:1200
[6] macro expansion
@ .\loading.jl:1180 [inlined]
[7] macro expansion
@ .\lock.jl:223 [inlined]
[8] require(into::Module, mod::Symbol)
@ Base .\loading.jl:1144
[9] include
@ .\Base.jl:419 [inlined]
[10] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt64}}, source::String)
@ Base .\loading.jl:1554
[11] top-level scope
@ stdin:1
in expression starting at C:\Users\olofs.julia\packages\FFMPEG\OUpap\src\FFMPEG.jl:1
in expression starting at stdin:1
ERROR: LoadError: Failed to precompile FFMPEG [c87230d0-a227-11e9-1b43-d7ebe4e7570a] to C:\Users\olofs.julia\compiled\v1.8\FFMPEG\jl_FC6F.tmp.
Stacktrace:
[1] error(s::String)
@ Base .\error.jl:35
[2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
@ Base .\loading.jl:1707
[3] compilecache
@ .\loading.jl:1651 [inlined]
[4] _require(pkg::Base.PkgId)
@ Base .\loading.jl:1337
[5] _require_prelocked(uuidkey::Base.PkgId)
@ Base .\loading.jl:1200
[6] macro expansion
@ .\loading.jl:1180 [inlined]
[7] macro expansion
@ .\lock.jl:223 [inlined]
[8] require(into::Module, mod::Symbol)
@ Base .\loading.jl:1144
[9] include
@ .\Base.jl:419 [inlined]
[10] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt64}}, source::Nothing)
@ Base .\loading.jl:1554
[11] top-level scope
@ stdin:1
in expression starting at C:\Users\olofs.julia\packages\Makie\Za3LL\src\Makie.jl:1
in expression starting at stdin:1
ERROR: Failed to precompile Makie [ee78f7c6-11fb-53f2-987a-cfe4a2b5a57a] to C:\Users\olofs.julia\compiled\v1.8\Makie\jl_E3D8.tmp.
Stacktrace:
[1] error(s::String)
@ Base .\error.jl:35
[2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
@ Base .\loading.jl:1707
[3] compilecache
@ .\loading.jl:1651 [inlined]
[4] _require(pkg::Base.PkgId)
@ Base .\loading.jl:1337
[5] _require_prelocked(uuidkey::Base.PkgId)
@ Base .\loading.jl:1200
[6] macro expansion
@ .\loading.jl:1180 [inlined]
[7] macro expansion
@ .\lock.jl:223 [inlined]
[8] require(into::Module, mod::Symbol)
@ Base .\loading.jl:1144

In case this is a Cairo issue, I get a similar issue installing the Cairo package:

Precompiling project…
✗ Pango_jll
✗ Cairo
0 dependencies successfully precompiled in 7 seconds. 221 already precompiled. 7 skipped during auto due to previous errors.
2 dependencies errored. To see a full report either run import Pkg; Pkg.precompile() or load the packages
[ Info: Precompiling Cairo [159f3aea-2a34-519c-b102-8c37f9878175]
ERROR: LoadError: InitError: could not load library “C:\Users\olofs.julia\artifacts\3aff78028a0bb2ad40ebc3ae7e465a52dcbe2730\bin\libcairo-2.dll”
The specified module could not be found.
Stacktrace:
[1] dlopen(s::String, flags::UInt32; throw_error::Bool)
@ Base.Libc.Libdl .\libdl.jl:117
[2] dlopen(s::String, flags::UInt32)
@ Base.Libc.Libdl .\libdl.jl:116
[3] macro expansion
@ C:\Users\olofs.julia\packages\JLLWrappers\QpMQW\src\products\library_generators.jl:54 [inlined]
[4] init()
@ Cairo_jll C:\Users\olofs.julia\packages\Cairo_jll\HW4xi\src\wrappers\x86_64-w64-mingw32.jl:18
[5] _include_from_serialized(pkg::Base.PkgId, path::String, depmods::Vector{Any})
@ Base .\loading.jl:831
[6] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String, build_id::UInt64)
@ Base .\loading.jl:1039
[7] _require(pkg::Base.PkgId)
@ Base .\loading.jl:1315
[8] _require_prelocked(uuidkey::Base.PkgId)
@ Base .\loading.jl:1200
[9] macro expansion
@ .\loading.jl:1180 [inlined]
[10] macro expansion
@ .\lock.jl:223 [inlined]
[11] require(into::Module, mod::Symbol)
@ Base .\loading.jl:1144
[12] include
@ .\Base.jl:419 [inlined]
[13] include_package_for_output(pkg::Base.PkgId, input::String, depot_path::Vector{String}, dl_load_path::Vector{String}, load_path::Vector{String}, concrete_deps::Vector{Pair{Base.PkgId, UInt64}}, source::Nothing)
@ Base .\loading.jl:1554
[14] top-level scope
@ stdin:1
during initialization of module Cairo_jll
in expression starting at C:\Users\olofs.julia\packages\Cairo\smWIA\src\Cairo.jl:1
in expression starting at stdin:1
ERROR: Failed to precompile Cairo [159f3aea-2a34-519c-b102-8c37f9878175] to C:\Users\olofs.julia\compiled\v1.8\Cairo\jl_6504.tmp.
Stacktrace:
[1] error(s::String)
@ Base .\error.jl:35
[2] compilecache(pkg::Base.PkgId, path::String, internal_stderr::IO, internal_stdout::IO, keep_loaded_modules::Bool)
@ Base .\loading.jl:1707
[3] compilecache
@ .\loading.jl:1651 [inlined]
[4] _require(pkg::Base.PkgId)
@ Base .\loading.jl:1337
[5] _require_prelocked(uuidkey::Base.PkgId)
@ Base .\loading.jl:1200
[6] macro expansion
@ .\loading.jl:1180 [inlined]
[7] macro expansion
@ .\lock.jl:223 [inlined]
[8] require(into::Module, mod::Symbol)
@ Base .\loading.jl:1144

I checked that the libcairo-2.dll is there in the artifact folder, so I’m confused by the error. On the other hand, the path being formatted without the / in front of the .julia directory looks weird to me.

Could this be a paths concat issue?

Is this Julia 1.8.4 on Windows? It has issues with libcairo, see GLMakie and Plots fail to precompile under Julia 1.8.4.

Best for now is to go back to 1.8.3 and a 1.8.5 will soon be released that fixes this.

Any word on 1.8.5 release date? This is a little tough time for new students who are installing Julia for classes to have Windows broken in practice (since Plots is used all over the place). We can try to tell them how to downgrade but that info may not get out very easily.