Skip to content
  • Brad King's avatar
    Do not link private dependent shared libraries on OS X > 10.4 · 5d993431
    Brad King authored
    The default OS X 10.4 linker incorrectly searches for dependencies of
    linked shared libraries only under the -isysroot location.  It fails to
    find dependencies of linked shared libraries in cases such as the
    ExportImport test.  It produces errors like:
    
     /usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: warning can't open dynamic library:
     libtestLib3Imp.dylib
     referenced from: /.../ExportImport/Root/lib/libtestLib3lib.1.2.dylib
     (checking for undefined symbols may be affected) (No such file or directory, errno = 2)
     /usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: Undefined symbols: _testLib3Imp
     referenced from libtestLib3lib expected to be defined in
     libtestLib3Imp.dylib
    
    or with CMAKE_SKIP_RPATH off to enable install_name in the Export side:
    
     /usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: warning can't open dynamic library:
     /Developer/SDKs/MacOSX10.4u.sdk/.../ExportImport/Export/impl/libtestLib3Imp.dylib
     referenced from: /.../ExportImport/Export/libtestLib3lib.1.2.dylib
     (checking for undefined symbols may be affected) (No such file or directory, errno = 2)
     /usr/libexec/gcc/i686-apple-darwin8/4.0.1/ld: Undefined symbols:_testLib3Imp
     referenced from libtestLib3lib expected to be defined in
     /.../ExportImport/Export/impl/libtestLib3Imp.dylib
    
    Note how "/Developer/SDKs/MacOSX10.4u.sdk" is prepended to the dependent
    library path.
    
    Commit 2cff26fa (Support linking to shared libs with dependent libs,
    2008-01-31) and commit 82fcaebe (Pass dependent library search path to
    linker on some platforms, 2008-02-01) worked around the problem by
    defining platform variable CMAKE_LINK_DEPENDENT_LIBRARY_FILES.  It tells
    CMake to link to dependent libraries explicitly by their path thus
    telling the linker where to find them.
    
    Unfortunately the workaround had the side effect of linking dependent
    libraries and defeats most benefits of LINK_INTERFACE_LIBRARIES.
    Fortunately OS X 10.5 and above do not need to find transitive
    dependencies at all so we can avoid the workaround on Modern OS X.
    5d993431