Reason for rpath usage on arm64
ryandesign at macports.org
Mon May 30 05:17:14 UTC 2022
On May 24, 2022, at 10:22, Ken Cunningham wrote:
>> Does anyone know why things seem to be using rpath on arm64 builds
> Basically, it comes down to the fact that Apple has disallowed DYLD_LIBRARY_PATH to work on newer systems.
> So gcc is installing it’s libraries with the @rpath linkage
So you're talking about how SIP doesn't pass DYLD_LIBRARY_PATH to child processes on El Capitan and later, which breaks the gcc test suite, therefore gcc now uses @rpath at build time to fix the problem, and does not rewrite the install_names at install time, therefore things with @rpath get installed.
That's not the issue that prompted me to start this thread.
When I enabled the test suite for the portmidi port (which does not use gcc)...
...I set "DYLD_LIBRARY_PATH=." in test.env so that the executable it runs can find the library it just built. This worked fine on Catalina x86_64 but on Big Sur arm64 it failed with the error message:
dyld: Library not loaded: @rpath/libportmidi.2.dylib
Referenced from: /path/to/portmidi/work/build/./qtest
Reason: image not found
Seeing "@rpath" in this error message, I added "-DCMAKE_BUILD_WITH_INSTALL_RPATH=OFF" to configure.args (to counteract "-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON" set by the cmake portgroup) and the problem went away.
Perhaps placing the blame on @rpath was the wrong conclusion, since I now realize that the install_names also use @rpath on Catalina x86_64 yet the test worked there. I just don't understand then why disabling @rpath on Big Sur arm64 made the tests work.
It seemed to me like I was seeing a lot of @rpath-related issues especially on arm64 lately, and this latest instance with portmidi prompted me to ask about it, but it could be that most or all of the other instances were related to the gcc situation you already discussed. I know we are using a different branch of gcc for arm64 so maybe that explains why the @rpath-related changes you mentioned only appear on arm64 so far.
More information about the macports-dev