After some more attempts, I discovered the issue which was somewhat unclear to me before.<br><br>CMake has the option CMAKE_INSTALL_NAME_DIR which specifies the parameter for the install_name_tool in OSX. I was attempting to use this with &quot;Module B&quot;, however it turns out this is incorrect. Instead, the user should use this command on &quot;Module A&quot; such that when &quot;Module B&quot; links to &quot;Module A&quot;, it pulls up the full path to find &quot;Module A&quot;. <br>

<br>Adding this to the &quot;Module A&quot; CMakeLists.txt and rebuilding correctly propagated the path to &quot;Module A&quot; when building &quot;Module B&quot; - my executable now finds the dynamic library correctly.<br>

<br>Hopefully this helps someone else in the future...<br>
<br>-Steve<br clear="all"><div><div>---</div><div>Steve Skutnik, Ph.D.</div>
<div><a href="http://neutroneconomy.blogspot.com/" target="_blank">http://neutroneconomy.blogspot.com</a></div></div>
<br><br><div class="gmail_quote">On Wed, Feb 13, 2013 at 11:58 AM, Steve Skutnik <span dir="ltr">&lt;<a href="mailto:skutnik@gmail.com" target="_blank">skutnik@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div dir="ltr"><div>I&#39;m having an issue with the RPATH not showing up for one of my shared libraries on OSX. Basically, I end up with a &quot;bare&quot; rpath to one of my shared libraries (i.e., no path prefix) when I check my binary using otool - L<br>




<br></div><div>Specifically, I have a project with a structure that looks like this<br><br>project/module_A<br>project/module_B<br><br></div><div>I&#39;m trying to build &quot;Module B&quot;, which depends on a shared library I build in &quot;Module A&quot;. (I also use several other shared libraries, but all of them are in system paths, i.e., /usr/local and /usr/lib.). What ends up happening is that all of the rpaths are set *except* for my shared library from Module A (for both the build and install versions of the binary).<br>




<br></div><div>After carefully reading the CMake primer on RPath handling here:<br><br></div><div><a href="http://www.cmake.org/Wiki/CMake_RPATH_handling" target="_blank">http://www.cmake.org/Wiki/CMake_RPATH_handling</a><br>



<br>I tried the suggestion under &quot;Always full rpath&quot;, i.e., my CMakeLists.txt file has the following:<br>
<br><pre style="margin-left:40px"># use, i.e. don&#39;t skip the full RPATH for the build tree
SET(CMAKE_SKIP_BUILD_RPATH  FALSE)

# when building, don&#39;t use the install RPATH already
# (but later on when installing)
SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) 

SET(CMAKE_INSTALL_RPATH &quot;${CMAKE_INSTALL_PREFIX}/lib&quot;)

# add the automatically determined parts of the RPATH
# which point to directories outside the build tree to the install RPATH
SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)


# the RPATH to be used when installing, but only if it&#39;s not a system directory
LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES &quot;${CMAKE_INSTALL_PREFIX}/lib&quot; isSystemDir)
IF(&quot;${isSystemDir}&quot; STREQUAL &quot;-1&quot;)
   SET(CMAKE_INSTALL_RPATH &quot;${CMAKE_INSTALL_PREFIX}/lib&quot;)
ENDIF(&quot;${isSystemDir}&quot; STREQUAL &quot;-1&quot;)
</pre><br>However, this still doesn&#39;t appear to be setting the RPATH variable for my dynamic library.  I likewise checked that CMAKE_INSTALL_RPATH is set correctly (i.e., the library from Module A sits in that directory). However, nothing I do seems to prefix an RPATH directory to my shared library for Module A. <br>



<br>One other thing - I&#39;ve also tried building this code on Linux (Ubuntu-12.10), and I&#39;ve noticed that the same configuration correctly sets the RPATH for Module A - so this seems to be specific to OSX. <br><br>


What am I missing here? Going through the list archives, I&#39;ve seen this problem pop up a few times with respect to OSX, but I haven&#39;t really seen anything that specifically solves this issue. Specifically, this message from a few weeks ago seems to be running into the exact same issue, but I don&#39;t see any replies:<br>



<br><a href="http://www.cmake.org/pipermail/cmake/2013-January/053335.html" target="_blank">http://www.cmake.org/pipermail/cmake/2013-January/053335.html</a><br><br>The only other thread I&#39;ve seen on this recently is here:<br>


<br><a href="http://www.cmake.org/pipermail/cmake/2011-April/043888.html" target="_blank">http://www.cmake.org/pipermail/cmake/2011-April/043888.html</a><br>
<br>The solution here was pretty much to either use install_name_tool manually (which does work, but it requires one to do it each time you build) or to use BundleUtilities. However, I noticed that CMake runs install_name_tool on its own for a library which is built with Module B (i.e., I have libModuleB_core.dylib which is built and linked into the moduleB binary); i.e., this shows up in cmake_install.cmake. So shouldn&#39;t there be some way to get CMake to appropriately run install_name_tool for me for Module A as well? Or at the very least, is there a reason no RPATH is being appended to Module A?<br>



<br>Thanks.<br><br>-Steve<br clear="all"></div><div><div><div><div><div>---</div><div>Steve Skutnik, Ph.D.</div>
<div><a href="http://neutroneconomy.blogspot.com/" target="_blank">http://neutroneconomy.blogspot.com</a></div></div>
</div></div></div></div>
</blockquote></div><br>