Posts

Post not yet marked as solved
16 Replies
9.2k Views
Hi,A cross-platform plugin architecture we developed needs to load libraries at runtime from arbitrary locations (within our plugins).On MacOS, dynamic library loading fails to find/use a dependency that was already loaded, despite the library "install-name" matching. The same technique works on Linux for a library "SONAME" and on Windows based on the DLL filename, however, on Mac, it seems like the dependency is not resolved, unless it is also on a path of library locations (eg. DYLD_LIBRARY_PATH).Am I missing the proper technique to achieve the desired behavior? Is this the expected behavior on Mac or an issue in dlopen resolving dependencies?For example:dlopen(/Users/craig/KayakSDK/Plugins/ca.digitalrapids.CommonMedia/bin/OS_X/libCommonMedia.dylib, 1): Library not loaded: libKayakNative.dylib Referenced from: /Users/craig/KayakSDK/Plugins/ca.digitalrapids.CommonMedia/bin/OS_X/libCommonMedia.dylib Reason: image not foundBut libKayakNative.dylib had already been loaded and has the expected "install-name".$ otool -D Plugins/ca.digitalrapids.KayakCore/bin/OS_X/libKayakNative.dylibPlugins/ca.digitalrapids.KayakCore/bin/OS_X/libKayakNative.dylib:libKayakNative.dylibSo why doesn't dlopen utilize the already loaded libKayakNative.dylib ? That's how SONAME on Linux works and the DLL name on Windows.If DYLD_LIBRARY_PATH specifies the folders within the plugins, then everything does load and execute fine. But this is far from ideal, as DYLD_LIBRARY_PATH would need to be configured ahead of launch, and cannot be modified at runtime by the application. If there was a way to modify DYLD_LIBRARY_PATH (or an equivalent) at runtime, that would work for us too.Thanks, any info is appreciated,Craig
Posted
by cwhite102.
Last updated
.