There is an old bug report #21076 on dynamic-link: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=21076
Say you have a file libyaml.0.so-2, dynamic-link can't load it (dynamic-link "libyaml.0.so-2") => exception even if there is a file libyaml.so: $ cat /usr/lib64/libyaml.so INPUT(libyaml-0.so.2) it fails with (dynamic-link "libyaml") I have submitted the following patch, which at least makes the first version work. If you think this is a libtool but you may be right, but the bug report on this has not been touched for 8 years: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=8976 This patch fixes issue with libtool and OSes which use non-standard extensions for shared libraries. The libltdl function lt_dlopenext expects the argument to have a standard extension or no extention. Arguments reflecting shared object files with non-standard extensions will fail to load. For example, my system has /usr/lib64/libyaml-0.so.2. w/o this patch (dynamic-link "libyaml-0.so.2") does not work; with it, it does. Go figure. --- libguile/dynl.c-orig 2020-03-20 05:56:42.101214929 -0700 +++ libguile/dynl.c 2020-03-20 05:57:40.432893330 -0700 @@ -69,7 +69,10 @@ handle = lt_dlopen (NULL); else { - handle = lt_dlopenext (fname); + handle = lt_dlopen (fname); + + if (handle == NULL) + handle = lt_dlopenext (fname); if (handle == NULL #ifdef LT_DIRSEP_CHAR