Search code examples
xcode3.2dlopenrpath

Does @rpath work for looking up .dylibs that are loaded/called from another .dylib?


I just found about the @rpath to load .dylib files using dlopen, and need some help understanding them. I am using Xcode 3.2.5 on a OSX machine.

I have several .dylib's that call other .dylib's, and which also call each other. The @rpath seems to work for the initial .dylib that is loaded, but once I make a dlopen call with another .dylib that uses the first .dyblib file that was previously found and loaded using @rpath, dlopen will fail saying that it can't locate the original .dylib.

Does @rpath only work for file the being used with dlopen, or is it also being used to resolve dependencies inside of the dylib file being opened?

UPDATE:

My further findings is leading me to use install_name_tools to change the inter-dependencies to have a @rpath to them. Is this the correct way of doing this?


Solution

  • After days of research and trial and error, I found out that I needed to do an -install_name on all my .dylibs with @rpath/dylibName.dylib as the install name for all libraries that I intend to use a relative path to find.