Makie/FFMPEG pb libharfbuzz.so.0: undefined symbol: FT_Get_Transform

Hi, I have a bug during animation with CairoMakie. I try the example from the doc:

using CairoMakie

scene = lines(rand(10); linewidth=10)

record(scene, "out.mp4", 1:255; framerate = 60) do i
    scene.plots[2][:color] = RGBf0(i/255, (255 - i)/255, 0) # animate scene
end;

ang get

julia> include("test.jl")
ffmpeg: symbol lookup error: /lib/x86_64-linux-gnu/libharfbuzz.so.0: undefined symbol: FT_Get_Transform
ERROR: UndefVarError: RGBf0 not defined
Stacktrace:
 [1] (::var"#5#6")(i::Int64)
   @ Main ~/temp/testRecord/test.jl:6
 [2] Record(func::var"#5#6", figlike::Makie.FigureAxisPlot, iter::UnitRange{Int64}; kw_args::Base.Pairs{Symbol, Any, Tuple{Symbol, Symbol}, NamedTuple{(:format, :framerate), Tuple{SubString{String}, Int64}}})
   @ Makie ~/.julia/packages/Makie/DekzU/src/recording.jl:167
 [3] record(func::Function, figlike::Makie.FigureAxisPlot, path::String, iter::UnitRange{Int64}; kw_args::Base.Pairs{Symbol, Int64, Tuple{Symbol}, NamedTuple{(:framerate,), Tuple{Int64}}})
   @ Makie ~/.julia/packages/Makie/DekzU/src/recording.jl:148
 [4] top-level scope
   @ ~/temp/testRecord/test.jl:5

julia> 

In case it helps :

julia> versioninfo()
Julia Version 1.8.5
Commit 17cfb8e65ea (2023-01-08 06:45 UTC)
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 32 Ă— 13th Gen Intel(R) Core(TM) i9-13900K
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-13.0.1 (ORCJIT, goldmont)
  Threads: 8 on 32 virtual cores
Environment:
  JULIA_EDITOR = code
  JULIA_NUM_THREADS = 8

julia> 


(testRecord) pkg> status
Status `~/temp/testRecord/Project.toml`
  [13f3f980] CairoMakie v0.10.5

It is Ubuntu 23.04. FWIW, the same code runs OK on my Mac…

Any hints ?

OK, the former example looks outdated. When I run the following MWE (from the update Makie docs) it runs OK with julia 1.9.0 but has the same issue with Julia 1.8.5

using CairoMakie

time = Observable(0.0)

xs = range(0, 7, length=40)

ys_1 = @lift(sin.(xs .- $time))
ys_2 = @lift(cos.(xs .- $time) .+ 3)

fig = lines(xs, ys_1, color = :blue, linewidth = 4,
    axis = (title = @lift("t = $(round($time, digits = 1))"),))
scatter!(xs, ys_2, color = :red, markersize = 15)

framerate = 30
timestamps = range(0, 2, step=1/framerate)

record(fig, "time_animation.mp4", timestamps;
        framerate = framerate) do t
    time[] = t
end

The problem is that I am using `ParallelStencil.jl which is not yet compatible with Julia 1.9.0…
I am stuck :frowning:

julia> include("observable.jl")
ffmpeg: symbol lookup error: /lib/x86_64-linux-gnu/libharfbuzz.so.0: undefined symbol: FT_Get_Transform
ERROR: IOError: write: broken pipe (EPIPE)

Have you tried in a new and empty project, e.g. Via ]activate --temp?

Hi Simon,

Thank you very much for your answer and for Makie in general !

I just try to run in a temp env with the same result :smiling_face_with_tear:.

results with temp project
laurent@tsi13900k:~/Projects/Acoustic.jl$ julia
               _
   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.8.5 (2023-01-08)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

(@v1.8) pkg> activate --temp
  Activating new project at `/tmp/jl_FO6W7P`

(jl_FO6W7P) pkg> add CairoMakie
    Updating registry at `~/.julia/registries/General.toml`
   Resolving package versions...
   Installed OpenSSL_jll ─ v1.1.21+0
  Downloaded artifact: OpenSSL
    Updating `/tmp/jl_FO6W7P/Project.toml`
  [13f3f980] + CairoMakie v0.10.5
    Updating `/tmp/jl_FO6W7P/Manifest.toml`
  [621f4979] + AbstractFFTs v1.3.1
  [1520ce14] + AbstractTrees v0.4.4
  [79e6a3ab] + Adapt v3.6.2
  [27a7e980] + Animations v0.4.1
  [67c07d97] + Automa v0.8.2
  [13072b0f] + AxisAlgorithms v1.0.1
  [39de3d68] + AxisArrays v0.4.6
  [fa961155] + CEnum v0.4.2
  [159f3aea] + Cairo v1.0.5
  [13f3f980] + CairoMakie v0.10.5
  [49dc2e85] + Calculus v0.5.1
  [d360d2e6] + ChainRulesCore v1.16.0
  [9e997f8a] + ChangesOfVariables v0.1.7
  [a2cac450] + ColorBrewer v0.4.0
  [35d6a980] + ColorSchemes v3.21.0
  [3da002f7] + ColorTypes v0.11.4
  [c3611d14] + ColorVectorSpace v0.9.10
  [5ae59095] + Colors v0.12.10
  [34da2185] + Compat v4.6.1
  [187b0558] + ConstructionBase v1.5.2
  [d38c429a] + Contour v0.6.2
  [9a962f9c] + DataAPI v1.15.0
  [864edb3b] + DataStructures v0.18.13
  [e2d170a0] + DataValueInterfaces v1.0.0
  [b429d917] + DensityInterface v0.4.0
  [31c24e10] + Distributions v0.25.95
  [ffbed154] + DocStringExtensions v0.9.3
  [fa6b7ba4] + DualNumbers v0.6.8
  [411431e0] + Extents v0.1.1
  [c87230d0] + FFMPEG v0.4.1
  [7a1cc6ca] + FFTW v1.6.0
  [5789e2e9] + FileIO v1.16.1
  [1a297f60] + FillArrays v1.1.0
  [53c48c17] + FixedPointNumbers v0.8.4
  [59287772] + Formatting v0.4.2
  [b38be410] + FreeType v4.0.0
  [663a7486] + FreeTypeAbstraction v0.10.0
  [46192b85] + GPUArraysCore v0.1.5
  [cf35fbd7] + GeoInterface v1.3.1
  [5c1252a2] + GeometryBasics v0.4.7
  [a2bd30eb] + Graphics v1.1.2
  [3955a311] + GridLayoutBase v0.9.1
  [42e2da0e] + Grisu v1.0.2
  [34004b35] + HypergeometricFunctions v0.3.16
  [2803e5a7] + ImageAxes v0.6.10
  [c817782e] + ImageBase v0.1.5
  [a09fc81d] + ImageCore v0.9.4
  [82e4d734] + ImageIO v0.6.6
  [bc367c6b] + ImageMetadata v0.9.8
  [9b13fd28] + IndirectArrays v1.0.0
  [d25df0c9] + Inflate v0.1.3
  [a98d9a8b] + Interpolations v0.14.7
  [8197267c] + IntervalSets v0.7.4
  [3587e190] + InverseFunctions v0.1.9
  [92d709cd] + IrrationalConstants v0.2.2
  [f1662d9f] + Isoband v0.1.1
  [c8e1da08] + IterTools v1.4.0
  [82899510] + IteratorInterfaceExtensions v1.0.0
  [692b3bcd] + JLLWrappers v1.4.1
  [682c06a0] + JSON v0.21.4
  [b835a17e] + JpegTurbo v0.1.2
  [5ab0869b] + KernelDensity v0.6.7
  [b964fa9f] + LaTeXStrings v1.3.0
  [8cdb02fc] + LazyModules v0.3.1
  [2ab3a3ac] + LogExpFunctions v0.3.23
  [1914dd2f] + MacroTools v0.5.10
  [ee78f7c6] + Makie v0.19.5
  [20f20a25] + MakieCore v0.6.3
  [dbb5928d] + MappedArrays v0.4.2
  [7eb4fadd] + Match v1.2.0
  [0a4f8689] + MathTeXEngine v0.5.6
  [978d7f02] + MiniQhull v0.4.0
  [e1d29d7a] + Missings v1.1.0
  [e94cdb99] + MosaicViews v0.3.4
  [77ba4419] + NaNMath v1.0.2
  [f09324ee] + Netpbm v1.1.0
  [510215fc] + Observables v0.5.4
  [6fe1bfb0] + OffsetArrays v1.12.9
  [52e1d378] + OpenEXR v0.3.2
  [bac558e1] + OrderedCollections v1.6.0
  [90014a1f] + PDMats v0.11.17
  [f57f5aa1] + PNGFiles v0.3.17
  [19eb6ba3] + Packing v0.5.0
  [5432bcbf] + PaddedViews v0.5.12
  [69de0a69] + Parsers v2.5.10
  [eebad327] + PkgVersion v0.3.2
  [995b91a9] + PlotUtils v1.3.5
  [647866c9] + PolygonOps v0.1.2
  [aea7be01] + PrecompileTools v1.1.1
  [21216c6a] + Preferences v1.4.0
  [92933f4c] + ProgressMeter v1.7.2
  [4b34888f] + QOI v1.0.0
  [1fd47b50] + QuadGK v2.8.2
  [b3c3ace0] + RangeArrays v0.3.2
  [c84ed2f1] + Ratios v0.4.4
  [189a3867] + Reexport v1.2.2
  [05181044] + RelocatableFolders v1.0.0
  [ae029012] + Requires v1.3.0
  [79098fc4] + Rmath v0.7.1
  [fdea26ae] + SIMD v3.4.5
  [7b38b023] + ScanByte v0.3.3
  [6c6a2e73] + Scratch v1.2.0
  [efcf1570] + Setfield v1.1.1
  [992d4aef] + Showoff v1.0.3
  [73760f76] + SignedDistanceFields v0.4.0
  [699a6c99] + SimpleTraits v0.9.4
  [45858cf5] + Sixel v0.1.2
  [a2af1166] + SortingAlgorithms v1.1.0
  [276daf66] + SpecialFunctions v2.2.0
  [c5dd0088] + StableHashTraits v0.3.1
  [cae243ae] + StackViews v0.1.1
  [90137ffa] + StaticArrays v1.5.25
  [1e83bf80] + StaticArraysCore v1.4.0
  [82ae8749] + StatsAPI v1.6.0
⌅ [2913bbd2] + StatsBase v0.33.21
  [4c63d2b9] + StatsFuns v1.3.0
  [09ab397b] + StructArrays v0.6.15
  [3783bdb8] + TableTraits v1.0.1
  [bd369af6] + Tables v1.10.1
  [62fd8b95] + TensorCore v0.1.1
  [731e570b] + TiffImages v0.6.4
  [3bb67fe8] + TranscodingStreams v0.9.13
  [981d1d27] + TriplotBase v0.1.0
  [9d95972d] + TupleTools v1.3.0
  [1cfade01] + UnicodeFun v0.4.1
  [efce3f68] + WoodburyMatrices v0.5.5
  [6e34b625] + Bzip2_jll v1.0.8+0
  [83423d85] + Cairo_jll v1.16.1+1
  [5ae413db] + EarCut_jll v2.2.4+0
  [2e619515] + Expat_jll v2.4.8+0
  [b22a6f82] + FFMPEG_jll v4.4.2+2
  [f5851436] + FFTW_jll v3.3.10+0
  [a3f928ae] + Fontconfig_jll v2.13.93+0
  [d7e528f0] + FreeType2_jll v2.10.4+0
  [559328eb] + FriBidi_jll v1.0.10+0
  [78b55507] + Gettext_jll v0.21.0+0
  [7746bdde] + Glib_jll v2.74.0+2
  [3b182d85] + Graphite2_jll v1.3.14+0
  [2e76f6c2] + HarfBuzz_jll v2.8.1+1
  [905a6f67] + Imath_jll v3.1.7+0
  [1d5cc7b8] + IntelOpenMP_jll v2023.1.0+0
  [aacddb02] + JpegTurbo_jll v2.1.91+0
  [c1c5ebd0] + LAME_jll v3.100.1+0
  [dd4b983a] + LZO_jll v2.10.1+0
⌅ [e9f186c6] + Libffi_jll v3.2.2+1
  [d4300ac3] + Libgcrypt_jll v1.8.7+0
  [7add5ba3] + Libgpg_error_jll v1.42.0+0
  [94ce4f54] + Libiconv_jll v1.16.1+2
  [4b2f31a3] + Libmount_jll v2.35.0+0
  [38a345b3] + Libuuid_jll v2.36.0+0
⌅ [856f044c] + MKL_jll v2022.2.0+0
  [e7412a2a] + Ogg_jll v1.3.5+1
  [18a262bb] + OpenEXR_jll v3.1.4+0
⌅ [458c3c95] + OpenSSL_jll v1.1.21+0
  [efe28fd5] + OpenSpecFun_jll v0.5.5+0
  [91d4177d] + Opus_jll v1.3.2+0
  [36c8627f] + Pango_jll v1.50.9+0
  [30392449] + Pixman_jll v0.40.1+0
  [460c41e3] + QhullMiniWrapper_jll v1.0.0+1
⌅ [784f63db] + Qhull_jll v8.0.1003+0
  [f50d1b31] + Rmath_jll v0.4.0+0
  [02c8fc9c] + XML2_jll v2.10.3+0
  [aed1982a] + XSLT_jll v1.1.34+0
  [4f6342f7] + Xorg_libX11_jll v1.6.9+4
  [0c0b7dd1] + Xorg_libXau_jll v1.0.9+4
  [a3789734] + Xorg_libXdmcp_jll v1.1.3+4
  [1082639a] + Xorg_libXext_jll v1.3.4+4
  [ea2f1a96] + Xorg_libXrender_jll v0.9.10+4
  [14d82f49] + Xorg_libpthread_stubs_jll v0.1.0+3
  [c7cfdc94] + Xorg_libxcb_jll v1.13.0+3
  [c5fb5394] + Xorg_xtrans_jll v1.4.0+3
  [9a68df92] + isoband_jll v0.2.3+0
  [a4ae2306] + libaom_jll v3.4.0+0
  [0ac62f75] + libass_jll v0.15.1+0
  [f638f0a6] + libfdk_aac_jll v2.0.2+0
  [b53b4c65] + libpng_jll v1.6.38+0
  [075b6546] + libsixel_jll v1.10.3+0
  [f27f6e37] + libvorbis_jll v1.3.7+1
  [1270edf5] + x264_jll v2021.5.5+0
  [dfaa095f] + x265_jll v3.5.0+0
  [0dad84c5] + ArgTools v1.1.1
  [56f22d72] + Artifacts
  [2a0f44e3] + Base64
  [8bf52ea8] + CRC32c
  [ade2ca70] + Dates
  [8ba89e20] + Distributed
  [f43a241f] + Downloads v1.6.0
  [7b1f6079] + FileWatching
  [9fa8497b] + Future
  [b77e0a4c] + InteractiveUtils
  [4af54fe1] + LazyArtifacts
  [b27032c2] + LibCURL v0.6.3
  [76f85450] + LibGit2
  [8f399da3] + Libdl
  [37e2e46d] + LinearAlgebra
  [56ddb016] + Logging
  [d6f4376e] + Markdown
  [a63ad114] + Mmap
  [ca575930] + NetworkOptions v1.2.0
  [44cfe95a] + Pkg v1.8.0
  [de0858da] + Printf
  [3fa0cd96] + REPL
  [9a3f8284] + Random
  [ea8e919c] + SHA v0.7.0
  [9e88b42a] + Serialization
  [1a1011a3] + SharedArrays
  [6462fe0b] + Sockets
  [2f01184e] + SparseArrays
  [10745b16] + Statistics
  [4607b0f0] + SuiteSparse
  [fa267f1f] + TOML v1.0.0
  [a4e569a6] + Tar v1.10.1
  [8dfed614] + Test
  [cf7118a7] + UUIDs
  [4ec0a83e] + Unicode
  [e66e0078] + CompilerSupportLibraries_jll v1.0.1+0
  [deac9b47] + LibCURL_jll v7.84.0+0
  [29816b5a] + LibSSH2_jll v1.10.2+0
  [c8ffd9c3] + MbedTLS_jll v2.28.0+0
  [14a3606d] + MozillaCACerts_jll v2022.2.1
  [4536629a] + OpenBLAS_jll v0.3.20+0
  [05823500] + OpenLibm_jll v0.8.1+0
  [efcefdf7] + PCRE2_jll v10.40.0+0
  [83775a58] + Zlib_jll v1.2.12+3
  [8e850b90] + libblastrampoline_jll v5.1.1+0
  [8e850ede] + nghttp2_jll v1.48.0+0
  [3f19e933] + p7zip_jll v17.4.0+0
        Info Packages marked with ⌅ have new versions available but compatibility constraints restrict them from upgrading. To see why use `status --outdated -m`
Precompiling project...
  5 dependencies successfully precompiled in 65 seconds. 183 already precompiled.

julia> pwd()
"/home/laurent/Projects/Acoustic.jl"

julia> include("test.jl")
ffmpeg: symbol lookup error: /lib/x86_64-linux-gnu/libharfbuzz.so.0: undefined symbol: FT_Get_Transform
ERROR: LoadError: IOError: write: broken pipe (EPIPE)
Stacktrace:
  [1] uv_write(s::Base.PipeEndpoint, p::Ptr{UInt8}, n::UInt64)
    @ Base ./stream.jl:1064
  [2] unsafe_write(s::Base.PipeEndpoint, p::Ptr{UInt8}, n::UInt64)
    @ Base ./stream.jl:1118
  [3] unsafe_write
    @ ./io.jl:683 [inlined]
  [4] write
    @ ./io.jl:706 [inlined]
  [5] recordframe!(io::VideoStream)
    @ Makie ~/.julia/packages/Makie/DekzU/src/ffmpeg-util.jl:247
  [6] Record(func::var"#7#8", figlike::Makie.FigureAxisPlot, iter::StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}; kw_args::Base.Pairs{Symbol, Any, Tuple{Symbol, Symbol}, NamedTuple{(:format, :framerate), Tuple{SubString{String}, Int64}}})
    @ Makie ~/.julia/packages/Makie/DekzU/src/recording.jl:168
  [7] record(func::Function, figlike::Makie.FigureAxisPlot, path::String, iter::StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}; kw_args::Base.Pairs{Symbol, Int64, Tuple{Symbol}, NamedTuple{(:framerate,), Tuple{Int64}}})
    @ Makie ~/.julia/packages/Makie/DekzU/src/recording.jl:148
  [8] top-level scope
    @ ~/Projects/Acoustic.jl/test.jl:17
  [9] include(fname::String)
    @ Base.MainInclude ./client.jl:476
 [10] top-level scope
    @ REPL[4]:1
in expression starting at /home/laurent/Projects/Acoustic.jl/test.jl:17

julia> 

Like I said it works OK with 1.9.0 so I did save my simulation data (that still have to run with 1.8.5) and make the animation in post-treatment with CairoMakie/julia 1.9.0. So I am not stuck anymore. In addition I can enjoy the GLMakie interactive animation with sliders on my local machine :wink:

I’m having the same problem on Manjaro. Has anyone found the issue?

(I also can’t use julia 1.9 yet…)

Nope. I use 1.9.x for Makie visualization and 1.8.5 for computations…

The problem is straight there: somehow you’re using system libraries instead of JLLs. How that happens, I don’t know. Educated guess: you set LD_LIBRARY_PATH to include system libraries. Or something similar.

I am having the same problem on Julia 1.9.x (I tested 1.9.0 and 1.9.2).

Furthermore, I am not aware of changing any ENV variables, and certainly not LD_LIBRARY_PATH.

I tried making temp environment, adding CairoMakie and running an example from docs:

time = Observable(0.0)
color_observable = @lift(RGBf($time, 0, 0))

fig = lines(0..10, sin, color = color_observable)

record(fig, "color_animation_2.mp4", timestamps; framerate = framerate) do t
    time[] = t
end

But still I get the same error:

ffmpeg: symbol lookup error: /lib64/libharfbuzz.so.0: undefined symbol: FT_Get_Transform
ERROR: IOError: write: broken pipe (EPIPE)
Stacktrace:
 [1] uv_write(s::Base.PipeEndpoint, p::Ptr{UInt8}, n::UInt64)
   @ Base ./stream.jl:1066
 [2] unsafe_write(s::Base.PipeEndpoint, p::Ptr{UInt8}, n::UInt64)
   @ Base ./stream.jl:1120
 [3] unsafe_write
   @ ./io.jl:685 [inlined]
 [4] write
   @ ./io.jl:708 [inlined]
 [5] recordframe!(io::VideoStream)
   @ Makie ~/.julia/packages/Makie/iECbF/src/ffmpeg-util.jl:247
 [6] Record(func::var"#87#88", figlike::Makie.FigureAxisPlot, iter::StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}; kw_args::Base.Pairs{Symbol, Any, Tuple{Symbol, Symbol}, NamedTuple{(:format, :framerate), Tuple{SubString{String}, Int64}}})
   @ Makie ~/.julia/packages/Makie/iECbF/src/recording.jl:168
 [7] record(func::Function, figlike::Makie.FigureAxisPlot, path::String, iter::StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}; kw_args::Base.Pairs{Symbol, Int64, Tuple{Symbol}, NamedTuple{(:framerate,), Tuple{Int64}}})
   @ Makie ~/.julia/packages/Makie/iECbF/src/recording.jl:148
 [8] top-level scope
   ...

Does anyone know what to do with it?

No idea, I did not get the problem with Julia 1.9.x.

What give versioninfo() and Pkg status ?

Hi, thanks for the quick reply!
The output of those commands is here:

(jl_futn5t) pkg> st
Status `/tmp/jl_futn5t/Project.toml`
  [13f3f980] CairoMakie v0.10.6

julia> versioninfo()
Julia Version 1.9.2
Commit e4ee485e909 (2023-07-05 09:39 UTC)
Platform Info:
  OS: Linux (x86_64-linux-gnu)
  CPU: 8 Ă— Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz
  WORD_SIZE: 64
  LIBM: libopenlibm
  LLVM: libLLVM-14.0.6 (ORCJIT, skylake)
  Threads: 1 on 8 virtual cores
Environment:
  LD_PRELOAD = /usr/lib64/libstdc++.so.6
  JULIA_EDITOR = code
  JULIA_NUM_THREADS =

I am using a release version of Julia installed via juliaup (but fixing the version to 1.9.0 does nothing)

Well, you are setting an environment variable which affects the dynamic loader. Don’t do that

1 Like

That’s interesting… If I run julia from the terminal (via e.g. julialauncher), the LD_PRELOAD ENV variable doesn’t showup in the versioninfo() output…

But running in the REPL provided by VS Code, it does

1 Like

Okay, thanks I managed to find it in the settings.json of VS Code, that LD_PRELOAD was being set as an environment variable for bash…

After removing it, it works like a charm :slight_smile:

1 Like