Search code examples
macosautotoolslibtoolrpath

Autotools - libtool: link: -rpath with @executable_path on MacOS


I'm trying to build a framework with Autotools on MacOS. This frameworks contains a library, let's call it libmytools.dylib, and an executable that uses the library. What I want is to link this library dynamically at runtime.

The executable is usually installed to /Library/Frameworks/mytools.Framework/Versions/Current/Commands/mytools The library is usually installed to /Library/Frameworks/mytools.Framework/Versions/Current/Libraries/libmytools.dylib

In case the framework is installed in that location, everything works fine, but when the framework is not installed on the machine but instead it's only embedded in another project, the library can't be found.

What I need is a so called "Runpath Dependent Library" as described here: https://developer.apple.com/library/content/documentation/DeveloperTools/Conceptual/DynamicLibraries/100-Articles/RunpathDependentLibraries.html

So what I did was adding mytools_LDFLAGS = -rpath @executable_path/../Libraries to the makefile.

But unfortunately libtool refuses to link my executable with the dynamic -rpath and shows the following error: libtool: link: only absolute run-paths are allowed.

I also tried mytools_LDFLAGS = -dynamic -rpath @executable_path/../Libraries but the result is the same...

What am I doing wrong??


Solution

  • This is the current libtool design. This thread from the libtool patches list may have a suggestion which will work for you. The suggestion is:

    build as normal and then postprocess using install_name_tool

    If you don't like this suggestion, it may be possible to adapt the hacky patch that started off that thread to work for you, and apply the patch to the generated libtool as part of bootstrap.sh configuration.