I never suggested copying files into the build tree. The original question was about how to locate libraries at runtime. You don't necessarily have to use @rpath, @executable_path is also a valid option. Another valid option one is to strip out @rpath and use DYLD_LIBRARY_PATH or DYLD_FALLBACK_LIBRARY_PATH.
If you want to set an rpath from cmake, you can also use target properties like: INSTALL_RPATH BUILD_WITH_INSTALL_RPATH where BUILD_WITH_INSTALL_RPATH is useful if you don't want to use CMake's install system. Regards, Juan On Thu, Sep 12, 2019 at 10:56 AM Michael Jackson <mike.jack...@bluequartz.net> wrote: > > On macOS you really should _not_ have to copy the libraries into the build > tree. I have never had to do that in 10 years of our product (Windows is a > different story). The trick is setting the correct options to add in the > paths to the libraries into the RPATH of the executable/library. (at least on > macOS & Linux systems). > > > > -- > > Mike Jackson > > > > > > From: Juan Sanchez <juan.e.sanc...@gmail.com> > Date: Thursday, September 12, 2019 at 11:35 AM > To: Michael Jackson <mike.jack...@bluequartz.net> > Cc: CMake <cmake@cmake.org> > Subject: Re: [CMake] Setting RPATH lookup on macOS > > > > The macOS install_name_tool can be used to change the RPATH of your binaries. > It can also be used to set the path for each of the libraries to be loaded. > For a python module I compile, I copy each of its dylib into the appropriate > directory relative to my shared library. I then use the install_name_tool to > change from an absolute path to a path relative to @loader_path. > > > > install_name_tool -change $j "@loader_path/../gcc/`basename $j`" $i > > where $j is the full path output from "otool -L" and "@loader_path/../gcc" > would point to a directory "gcc" relative to the directory containing my > python module. > > For a binary executable, I would explore placing required dylib files into a > directory relative to @executable_path. > > Regards, > > > > Juan > > > > On Wed, Sep 11, 2019 at 4:33 PM Michael Jackson <mike.jack...@bluequartz.net> > wrote: > > Already looked on google and at the CMake documentation but everything listed > does not seem to work so here is the setup. > > I am using MKL and I have a home grown FindMKL since there isn’t an official > one. Inside that is the typical find_library() calls which will find the > libraries just fine. One of those libraries is a dynamic library (.dylib). > Using otool -L on that library the install_name is encoded as @rpath. > > Now I have my add_executable(foo…) and target_link_libraries (Foo > ${MKL_LIBRARIES} ). > > Everything compiles and links fine. The issue is at runtime. The app will not > launch because libmkl_rt.dylib is not loaded because the path to that library > is not encoded into the executable. > > 639:[mjackson@ferb:ifort-release]$ otool -l > Bin/EMsoftWorkbench.app/Contents/MacOS/EMsoftWorkbench | grep "path" > name @rpath/libEbsdLib.dylib (offset 24) > name @rpath/libmkl_rt.dylib (offset 24) > name @rpath/QtOpenGL.framework/Versions/5/QtOpenGL (offset 24) > name @rpath/QtNetwork.framework/Versions/5/QtNetwork (offset 24) > name @rpath/QtConcurrent.framework/Versions/5/QtConcurrent (offset > 24) > name @rpath/QtWidgets.framework/Versions/5/QtWidgets (offset 24) > name @rpath/QtGui.framework/Versions/5/QtGui (offset 24) > name @rpath/QtCore.framework/Versions/5/QtCore (offset 24) > path /Users/Shared/EMsoft_SDK-ifort/EbsdLib-0.1-Release/lib (offset > 12) > path /Users/Shared/EMsoft_SDK-ifort/Qt5.12.3/5.12.3/clang_64/lib > (offset 12) > > > Oddly the Qt libraries and one of my own libraries do get their rpaths > encoded. I feel like I need to append to the RPATH that gets encoded into the > executable but I am not really figuring out how to do that. > > Help.... > > -- > Michael Jackson | Owner, President > BlueQuartz Software > [e] mike.jack...@bluequartz.net > [w] www.bluequartz.net <http://www.bluequartz.net> > > > -- > > Powered by www.kitware.com > > Please keep messages on-topic and check the CMake FAQ at: > http://www.cmake.org/Wiki/CMake_FAQ > > Kitware offers various services to support the CMake community. For more > information on each offering, please visit: > > CMake Support: http://cmake.org/cmake/help/support.html > CMake Consulting: http://cmake.org/cmake/help/consulting.html > CMake Training Courses: http://cmake.org/cmake/help/training.html > > Visit other Kitware open-source projects at > http://www.kitware.com/opensource/opensource.html > > Follow this link to subscribe/unsubscribe: > https://cmake.org/mailman/listinfo/cmake -- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake