dlopen在OSX上失败了

时间:2016-03-15 11:00:32

标签: c macos dylib dlopen

我正在使用的模拟软件失败,出现以下错误消息:

[Err] [Plugin.hh:165] Failed to load plugin //Users/../catkin_ws/devel/lib/libgazebo_ros_paths_plugin.dylib: dlopen(//Users/../catkin_ws/devel/lib/libgazebo_ros_paths_plugin.dylib, 9): Library not loaded: libroslib.dylib
  Referenced from: //Users/../catkin_ws/devel/lib/libgazebo_ros_paths_plugin.dylib
  Reason: image not found
[Err] [Plugin.hh:165] Failed to load plugin //Users/../catkin_ws/devel/lib/libgazebo_ros_api_plugin.dylib: dlopen(//Users/../catkin_ws/devel/lib/libgazebo_ros_api_plugin.dylib, 9): Library not loaded: libroslib.dylib
  Referenced from: //Users/../catkin_ws/devel/lib/libgazebo_ros_api_plugin.dylib
  Reason: image not found

我查看了应用程序源代码(在Plugin.hh文件中),我发现此消息来自该行代码:

void *dlHandle = dlopen(fullname.c_str(), RTLD_LAZY|RTLD_GLOBAL);
if (!dlHandle)
{
    gzerr << "Failed to load plugin " << fullname << ": "
    << dlerror() << "\n";
    return result;
}

如果我理解正确的dlopen man,RTLD_LAZY应该在错误符号的情况下推迟失败,所以我认为dlopen没有失败。

那么这次失败的原因是什么?这是其中一个库上的otool输出(如果有帮助的话):

$ otool -L /Users/.../catkin_ws/devel/lib/libgazebo_ros_paths_plugin.dylib
/Users/...catkin_ws/devel/lib/libgazebo_ros_paths_plugin.dylib:
    /Users/.../catkin_ws/devel/lib/libgazebo_ros_paths_plugin.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/opt/gazebo6/lib/libgazebo.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_client.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_gui_building.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_gui_viewers.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_gui_model.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_gui.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_sensors.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_rendering.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_selection_buffer.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_physics_bullet.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_physics_simbody.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_physics_ode.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_physics.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_ode.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_transport.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_msgs.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_util.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_common.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_skyx.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_gimpact.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_opcode.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_opende_ou.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_math.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/gazebo6/lib/libgazebo_ccd.6.dylib (compatibility version 6.0.0, current version 6.5.1)
    /usr/local/opt/boost/lib/libboost_thread-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/opt/boost/lib/libboost_signals-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/opt/boost/lib/libboost_system-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/opt/boost/lib/libboost_filesystem-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/opt/boost/lib/libboost_program_options-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/opt/boost/lib/libboost_regex-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/opt/boost/lib/libboost_iostreams-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/opt/boost/lib/libboost_date_time-mt.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/opt/protobuf/lib/libprotobuf.9.dylib (compatibility version 10.0.0, current version 10.1.0)
    /usr/local/opt/sdformat3/lib/libsdformat.3.dylib (compatibility version 3.0.0, current version 3.6.0)
    /usr/local/opt/ignition-math2/lib/libignition-math2.2.dylib (compatibility version 2.0.0, current version 2.2.3)
    /usr/local/opt/ogre/lib/libOgreMain.1.7.4.dylib (compatibility version 0.0.0, current version 1.7.4)
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
    libroslib.dylib (compatibility version 0.0.0, current version 0.0.0)
    libtf.dylib (compatibility version 0.0.0, current version 0.0.0)
    libtf2_ros.dylib (compatibility version 0.0.0, current version 0.0.0)
    libactionlib.dylib (compatibility version 0.0.0, current version 0.0.0)
    libmessage_filters.dylib (compatibility version 0.0.0, current version 0.0.0)
    libroscpp.dylib (compatibility version 0.0.0, current version 0.0.0)
    libxmlrpcpp.dylib (compatibility version 0.0.0, current version 0.0.0)
    libtf2.dylib (compatibility version 0.0.0, current version 0.0.0)
    librosconsole.dylib (compatibility version 0.0.0, current version 0.0.0)
    librosconsole_log4cxx.dylib (compatibility version 0.0.0, current version 0.0.0)
    librosconsole_backend_interface.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/opt/log4cxx/lib/liblog4cxx.10.dylib (compatibility version 11.0.0, current version 11.0.0)
    libdynamic_reconfigure_config_init_mutex.dylib (compatibility version 0.0.0, current version 0.0.0)
    libroscpp_serialization.dylib (compatibility version 0.0.0, current version 0.0.0)
    librostime.dylib (compatibility version 0.0.0, current version 0.0.0)
    libcpp_common.dylib (compatibility version 0.0.0, current version 0.0.0)
    /usr/local/opt/console_bridge/lib/libconsole_bridge.0.2.dylib (compatibility version 0.2.0, current version 0.0.0)
    /usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0)
编辑:我明白缺少的库实际上是libroslib.dylib,如果“(兼容版本0.0.0,当前版本0.0.0)”与此相关,我想这个问题将是相同的其他库(libtf ...)。

PS:env | grep DYLD什么都不返回

PS2:我正在寻找根本原因的修复方法,而不是在另一个问题(我没有重复)中使用install_name建议的修补程序。

0 个答案:

没有答案