FFMPEG.jl icon indicating copy to clipboard operation
FFMPEG.jl copied to clipboard

`using PyPlot` before `using FFMPEG`: Could not load library libobject-2.0.so.0

Open RememberSammyJenkins opened this issue 3 years ago • 1 comments

Meta

This is similar to #25, but about another library and persists for julia v1.6.2, FFMPEG v0.4.1, PyPlot v2.10.0. That issue is also over a year old and has not got any replies. Feel free to point me to an issue where this is closed in case I missed it.

The issue

In short, the issue is that using FFMPEG has to be executed before using PyPlot, otherwise there is an LoadError: InitError: could not load library.

The stacktrace:

ERROR: LoadError: InitError: could not load library "/home/[USER]/.julia/artifacts/e086922a5a3c20ca3e6866a33e42d8ec4689553e/lib/libgio-2.0.so"
/home/[USER]/.julia/artifacts/e086922a5a3c20ca3e6866a33e42d8ec4689553e/lib/libgobject-2.0.so.0: undefined symbol: g_uri_ref
Stacktrace:
  [1] dlopen(s::String, flags::UInt32; throw_error::Bool)
    @ Base.Libc.Libdl ./libdl.jl:114
  [2] dlopen(s::String, flags::UInt32)
    @ Base.Libc.Libdl ./libdl.jl:114
  [3] macro expansion
    @ ~/.julia/packages/JLLWrappers/bkwIo/src/products/library_generators.jl:54 [inlined]
  [4] __init__()
    @ Glib_jll ~/.julia/packages/Glib_jll/nSLTF/src/wrappers/x86_64-linux-gnu.jl:18
  [5] _include_from_serialized(path::String, depmods::Vector{Any})
    @ Base ./loading.jl:696
  [6] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String)
    @ Base ./loading.jl:782
  [7] _tryrequire_from_serialized(modkey::Base.PkgId, build_id::UInt64, modpath::String)
    @ Base ./loading.jl:711
  [8] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String)
    @ Base ./loading.jl:771
  [9] _tryrequire_from_serialized(modkey::Base.PkgId, build_id::UInt64, modpath::String)
    @ Base ./loading.jl:711
 [10] _require_search_from_serialized(pkg::Base.PkgId, sourcepath::String)
    @ Base ./loading.jl:771
 [11] _require(pkg::Base.PkgId)
    @ Base ./loading.jl:1020
 [12] require(uuidkey::Base.PkgId)
    @ Base ./loading.jl:936
 [13] require(into::Module, mod::Symbol)
    @ Base ./loading.jl:923
during initialization of module Glib_jll

with my username [USER].

This also has the consequence that packages using PyPlot and FFMPEG can precompile successfully with the correct order, but cannot be used themselves. At least that is my experience right now with my own package/module.

I have tried

  • LD_LIBRARY_PATH="" julia issue_MWE.jl with issue_MWE.jl supplied below.
  • LD_LIBRARY_PATH="/home/[USER]/.julia/artifacts/e086922a5a3c20ca3e6866a33e42d8ec4689553e/lib" julia issue_MWE.jl
  • re-ordering the using's in my package

Minimal (not) working example

cd(mktempdir())

import Pkg
Pkg.activate(".")
Pkg.add("FFMPEG")
Pkg.add("PyPlot")

using PyPlot
using FFMPEG

# I never get to see this :(
println("Congrats, you got here!")

RememberSammyJenkins avatar Sep 10 '21 16:09 RememberSammyJenkins

I'm also running into what appears to be a similar issue. Was a root cause or resolution ever found?

baumgold avatar Jan 12 '24 18:01 baumgold