ROS catkin构建-找不到共享库

时间:2019-01-19 20:14:59

标签: c++ linker ros catkin

我正在尝试创建该ROS软件包https://github.com/toddhester/rl-texplore-ros-pkg,但由于以下错误,它无法构建“ rl_experiment”:

/usr/bin/ld: cannot find -lagentlib
/usr/bin/ld: cannot find -lenvlib
collect2: error: ld returned 1 exit status

我正在使用ROS Kinetic。共享库确实存在于文件夹/texplore/devel/.private/rl_env/lib/和/texplore/devel/.private/rl_agent/lib/中,符号链接位于/ texplore / devel / lib /

我尝试了以下操作:

(1)将/ texplore / devel / lib /导出到LD_LIBRARY_PATH

(2)将符号链接添加到/ texplore / src / rl_experiment / src中的库

(3)将库路径添加到target_link_libraries

target_link_libraries(experiment agentlib envlib ${catkin_LIBRARIES} 
    "/media/usr/texplore/devel/lib/libagentlib.so"
    "/media/usr/texplore/devel/lib/libenvlib.so")

(4)设置链接器的搜索路径

SET(CMAKE_EXE_LINKER_FLAGS 
          "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath -Wl,/media/usr/texplore/devel/lib/")

它没有用。最后,我将符号链接添加到/ usr / local / lib并成功了。但我不希望该文件夹中的符号链接。

因此,链接器只是不搜索构建树。我的问题是,为什么catkin没有在catkin_LIBRARIES中添加链接器路径?我之前已经构建了ROS软件包,但无法确定为什么这个特定的软件包不起作用。

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题。我根据ROS Answers上的this post和catkin_packages宏的通用CMakeLists.txt文件中的以下注释进行了以下更改:

## LIBRARIES: libraries you create in this project that dependent projects also need

我做了一些事情来解决这个问题...

  1. 已添加 LIBRARIES agentlib文件中的catkin_packagesrl_agent/CMakeLists.txt宏。这样一来agentlib就可以使用rl_experiment库。
  2. LIBRARIES envlib添加到catkin_packages文件中的rl_env/CMakeLists.txt宏中。这样一来envlib就可以使用rl_experiment库。
  3. agentlib文件的envlib宏中删除了target_link_librariesrl_experiment/CMakeLists.txt。这些不是必需的。
  4. 已验证的rl_agentrl_env软件包在find_package的{​​{1}}宏中列出。

...然后一切都成功编译了。

添加摘要以进一步说明...

  1. rl_agent CMakeLists.TXT更改(上面的项目1):
rl_experiment/CMakeLists.txt
  1. rl_env CMakeLists.txt更改(上面的项目2):
    ...

    ## Declare a cpp library
    # add_library(rgbd_tools
    #   src/${PROJECT_NAME}/
    # )

    add_library(agentlib
      src/Agent/DiscretizationAgent.cc
      src/Agent/QLearner.cc
      ...
      src/newmat/newmatrm.cc
      src/newmat/newmat9.cc
    )

    ## Declare a cpp executable
    # add_executable(rgbd_tools_node src/rgbd_tools_node.cpp)

    ...
  1. rl_experiment CMakeLists.txt更改(上面的项目3和4):
    ...
    ###################################
    ## catkin specific configuration ##
    ###################################
    ...
    catkin_package(
       INCLUDE_DIRS include
       LIBRARIES envlib
    #  CATKIN_DEPENDS roscpp rospy std_msgs
       CATKIN_DEPENDS message_runtime
    #  DEPENDS system_lib
    )

    ...