If someone could give me some clues about how to debug this it would be great.
I'm trying to figure out why "it" fails to load a particular dylib under macOS."it" meaning that I'm not sure who is actually failing, but I suspect it is actually a failure detected and reported by dlopen(3) itself, rather than something wrong in cffi.
The problem seems to be that loading libgdk-x11-2.0.0.dylib triggers a complaint about a library I have loaded from a different place, but the error message indicates a location I have not loaded my LD_LIBRARY_PATH.
Could it possibly be that libgdk-x11-2.0.0.dylib has a hard coded path in it pointing to /usr/local/lib ?
If someone could give me some clues about how to debug this it would be great.
I've set up my LD_LIBRARY_PATH so that it seems to be loading the correct libcairo.2.dylib from /usr/local/Cellar/cairo/1.12.16_1/lib/libcairo.2.dylib. The reason I think this is because both vmmap (unix command line) and cffi::list-foreign-libraries (lisp) give compatible results.
sh> vmmap -w 16787 | grep dylib | sed -e 's/^.*SM=... //' | grep cairo
/usr/local/Cellar/cairo/1.14.6_1/lib/libcairo.2.dylib
sh>
and
CL-USER> (cffi::list-foreign-libraries)
(...
#<CFFI:FOREIGN-LIBRARY
:LIBCAIRO #P"/usr/local/Cellar/cairo/1.12.16_1/lib/libcairo.dylib" (truename=#P"/usr/local/Cellar/cairo/1.12.16_1/lib/libcairo.2.dylib")>)
CL-USER>
However, when I attempt to load libgdk-x11-2.0.0.dylib it complains that it cannot find a particular symbol in /usr/local/lib/libcairo.dylib. Why is it complaining about /usr/local/lib/libcairo.dylib?
Unable to load any of the alternatives:
("libgdk-x11-2.0.0.dylib" "libgdk-x11-2.0.dylib")
Attempting to load GDK::GDK from lib "libgdk-x11-2.0.dylib"
(%LOAD-FOREIGN-LIBRARY GDK
/usr/local/Cellar/gtk+/2.24.24/lib/libgdk-x11-2.0.0.dylib)
Unable to load foreign library (GDK::GDK).
Error opening shared object "/usr/local/Cellar/gtk+/2.24.24/lib/libgdk-x11-2.0.0.dylib":
dlopen(/usr/local/Cellar/gtk+/2.24.24/lib/libgdk-x11-2.0.0.dylib, 10): Symbol not found: _cairo_xlib_surface_create
Referenced from: /usr/local/Cellar/gtk+/2.24.24/lib/libgdk-x11-2.0.0.dylib
Expected in: /usr/local/lib/libcairo.dylib
in /usr/local/Cellar/gtk+/2.24.24/lib/libgdk-x11-2.0.0.dylib.
Attempting to load GDK::GDK from lib "libgdk-x11-2.0.0.dylib"
(%LOAD-FOREIGN-LIBRARY GDK
/usr/local/Cellar/gtk+/2.24.24/lib/libgdk-x11-2.0.0.dylib)
Unable to load foreign library (GDK::GDK).
Error opening shared object "/usr/local/Cellar/gtk+/2.24.24/lib/libgdk-x11-2.0.0.dylib":
dlopen(/usr/local/Cellar/gtk+/2.24.24/lib/libgdk-x11-2.0.0.dylib, 10): Symbol not found: _cairo_xlib_surface_create
Referenced from: /usr/local/Cellar/gtk+/2.24.24/lib/libgdk-x11-2.0.0.dylib
Expected in: /usr/local/lib/libcairo.dylib
in /usr/local/Cellar/gtk+/2.24.24/lib/libgdk-x11-2.0.0.dylib.
[Condition of type CFFI:LOAD-FOREIGN-LIBRARY-ERROR]