I’m using Ardour 8.6 (downloaded binaries). I recently upgraded from Fedora 37 to 40 (one release at a time, but back to back). After this, Ardour claims that it can’t find my Calf plugins (it shows the “Missing Plugins” modal window). Other plugins are fine; it’s only the Calf stuff that’s affected. I’ve come up with a workaround, but wanted to document the issue and hopefully find a less janky fix.
The in-app log shows:
2024-05-06T11:27:10 [ERROR]: LV2: Failed to instantiate plugin http://calf.sourceforge.net/plugins/Compressor
2024-05-06T11:27:10 [ERROR]: Found a reference to a plugin ("http://calf.sourceforge.net/plugins/Compressor") that is unknown.
Perhaps it was removed or moved since it was last used.
…and so on for each Calf instance.
strace
shows that it is in fact enumerating the plugins and attempting to load them.
When run from the command line, the relevant error message is:
lilv_lib_open(): error: Failed to open library /usr/lib64/lv2/calf.lv2/calf.so (/lib64/libinstpatch-1.0.so.2: undefined symbol: g_once_init_leave_pointer)
…again, once for each Calf instance.
Calf version:
$ dnf list installed | grep -i calf
calf.x86_64 0.90.3-18.fc40 @fedora
lv2-calf-plugins.x86_64 0.90.3-18.fc40 @fedora
lv2-calf-plugins-gui.x86_64 0.90.3-18.fc40 @fedora
From dnf logs, it looks like the old version was 0.90.3-12.fc37. Downgrading to this version did not help.
As suggested above, calf.so depends on libinstpatch:
$ ldd /usr/lib64/calf/calf.so
linux-vdso.so.1 (0x00007ffe159ea000)
libexpat.so.1 => /lib64/libexpat.so.1 (0x00007f3b55dbd000)
// etc...
libinstpatch-1.0.so.2 => /lib64/libinstpatch-1.0.so.2 (0x00007f3b5480a000)
// etc...
libinstpatch has a reference to g_once_init_leave_pointer
:
$ nm -D /lib64/libinstpatch-1.0.so.2 | grep g_once_init_leave_pointer
U g_once_init_leave_pointer
…which is defined in the system libglib-2.0.so.0:
$ nm -D /lib64/libglib-2.0.so.0 | (grep g_once_init_leave_pointer || echo nada)
0000000000088d90 T g_once_init_leave_pointer
…but not in the one that ships with Ardour:
$ nm -D /opt/Ardour-8.6.0/lib/libglib-2.0.so.0 | (grep g_once_init_leave_pointer || echo nada)
nada
If I invoke Ardour with “LD_PRELOAD=/usr/lib64/libglib-2.0.so Ardour8
”, it loads the plugins okay, but double-clicking on the plugin in the mixer window does nothing in the GUI, and produces similar results in the in-app log:
[ERROR]: failed to instantiate LV2 GUI
…and on the terminal:
suil error: Unable to open UI library /usr/lib64/lv2/calf.lv2/calflv2gui.so (/lib64/libgdk_pixbuf-2.0.so.0: undefined symbol: g_task_set_static_name)
Adding /usr/lib64/libgio-2.0.so
to the pre-load led to:
/opt/Ardour-8.6.0/bin/ardour-8.6.0: /opt/Ardour-8.6.0/lib/libmount.so.1: version `MOUNT_2_40' not found (required by /usr/lib64/libgio-2.0.so)
Adding /usr/lib64/libmount.so
produced:
/opt/Ardour-8.6.0/bin/ardour-8.6.0: symbol lookup error: /usr/lib64/libgio-2.0.so: undefined symbol: g_module_open_full
Finally I got things “working” with LD_PRELOAD="/usr/lib64/libglib-2.0.so /usr/lib64/libgio-2.0.so /usr/lib64/libmount.so /usr/lib64/libgmodule-2.0.so" Ardour8
.
This seems to work in basic testing (the track plays, the compressors compress, the GUIs gui, etc.), but obviously I’m not super comfortable running it this way. Any thoughts on a proper fix?