MAC OS:尽管rpath正确,但未找到动态链接库 我有一个(相对)大的C++程序,它编译和运行在Ubuntu上(使用cGue/TabKin)。 它在mac os上编译良好,但在尝试启动可执行文件时,我收到错误消息: dyld: Library not loaded: <name of library>.dylib Referenced from: <path to executable>/<executable> Reason: image not found

MAC OS:尽管rpath正确,但未找到动态链接库 我有一个(相对)大的C++程序,它编译和运行在Ubuntu上(使用cGue/TabKin)。 它在mac os上编译良好,但在尝试启动可执行文件时,我收到错误消息: dyld: Library not loaded: <name of library>.dylib Referenced from: <path to executable>/<executable> Reason: image not found,c++,macos,cmake,catkin,C++,Macos,Cmake,Catkin,答案来自于一位记者的评论 我需要使用@rpath 实际上MacOSX确实有rpath的概念。10.4之前 只有@executable_路径指向 可执行二进制文件(与加载的任何dylib相反)。 @10.4中引入了loader_路径,允许dylibs加载 依赖项基于它们的位置(而不是 可执行文件-谁知道库在使用什么) 10.5苹果引入@rpath,烘烤到装载机中 二进制文件-可执行文件或库。因此,与其看到: @加载程序\路径/../../Library/Frameworks/blah.dylib您

答案来自于一位记者的评论

我需要使用@rpath

实际上MacOSX确实有rpath的概念。10.4之前 只有@executable_路径指向 可执行二进制文件(与加载的任何dylib相反)。 @10.4中引入了loader_路径,允许dylibs加载 依赖项基于它们的位置(而不是 可执行文件-谁知道库在使用什么)

10.5苹果引入@rpath,烘烤到装载机中 二进制文件-可执行文件或库。因此,与其看到: @加载程序\路径/../../Library/Frameworks/blah.dylib您可能会看到 @rpath/Library/Frameworks/blah.dylib

这意味着如果rpath设置为。而且/它会看 ./Library/Frameworks/blah.dylib,然后 /任何库的Library/Frameworks/blah.dylib


你在用Xcode吗?如果是这样,它在这里是什么样子的:Xcode>project>target>buildphases>linklibraries。。。另外,Xcode>目标>生成设置。。。这里有各种库链接我正在针对我的项目中编译的库进行链接,这些库安装在${CMAKE_install_PREFIX}/lib/${MACHTYPE}文件夹中。
otool-D.dylib
在其安装位置的输出是什么?
otool -l <executable> | grep LC_RPATH -A2
      cmd LC_RPATH
  cmdsize 64
     path <correct absolute path to folder containing library> (offset 12)

      cmd LC_RPATH
  cmdsize 24
     path /sw/lib (offset 12)

      cmd LC_RPATH
  cmdsize 32
     path /usr/X11/lib (offset 12)

      cmd LC_RPATH
  cmdsize 32
     path /opt/local/lib (offset 12)

      cmd LC_RPATH
  cmdsize 32
     path /opt/X11/lib (offset 12)
otool -L <executable>
<executable name>:
    <library name>.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/lib/libedit.3.dylib (compatibility version 2.0.0, current version 3.0.0)
    /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0)
    /opt/X11/lib/libglut.3.dylib (compatibility version 13.0.0, current version 13.0.0)
    /opt/X11/lib/libGL.1.dylib (compatibility version 1.2.0, current version 1.2.0)
    /opt/X11/lib/libGLU.1.dylib (compatibility version 1.3.0, current version 1.3.0)
    /opt/X11/lib/libX11.6.dylib (compatibility version 10.0.0, current version 10.0.0)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
# use, i.e. don't skip the full RPATH for the build tree
SET(CMAKE_SKIP_BUILD_RPATH  FALSE)

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

SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib/${MACHTYPE}")

# 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's not a system directory
LIST(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib/${MACHTYPE}" isSystemDir)
IF("${isSystemDir}" STREQUAL "-1")
    SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib/${MACHTYPE}")
ENDIF("${isSystemDir}" STREQUAL "-1")