簡體   English   中英

ROS catkin構建-找不到共享庫

[英]ROS catkin build - cannot find shared library

我正在嘗試創建此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軟件包,但是無法確定為什么這個特定的軟件包不起作用。

我遇到了同樣的問題。 基於ROS Answers上的這篇文章以及catkin_packages宏的通用CMakeLists.txt文件中的以下注釋,我進行了以下更改:

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

我做了一些事情來解決這個問題...

  1. 新增LIBRARIES agentlibcatkin_packagesrl_agent/CMakeLists.txt文件。 這使agentlib庫稍后可用於rl_experiment
  2. 新增LIBRARIES envlibcatkin_packagesrl_env/CMakeLists.txt文件。 這使envlib庫稍后可用於rl_experiment
  3. 刪除agentlibenvlibtarget_link_librariesrl_experiment/CMakeLists.txt文件。 這些不是必需的。
  4. 已驗證的rl_agentrl_env軟件包在rl_experiment/CMakeLists.txtfind_package宏中列出。

...然后一切都成功編譯了。

添加摘要以進一步說明...

  1. rl_agent CMakeLists.TXT更改(上面的項目1):
    ...

    ## 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_env CMakeLists.txt更改(上面的項目2):
    ...
    ###################################
    ## catkin specific configuration ##
    ###################################
    ...
    catkin_package(
       INCLUDE_DIRS include
       LIBRARIES envlib
    #  CATKIN_DEPENDS roscpp rospy std_msgs
       CATKIN_DEPENDS message_runtime
    #  DEPENDS system_lib
    )

    ...
  1. rl_experiment CMakeLists.txt更改(上面的項目3和4):
    ...
    ## Find catkin macros and libraries
    ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz)
    ## is used, also find other catkin packages
    find_package(catkin REQUIRED COMPONENTS
      roscpp
      std_msgs
      rl_common
      rl_env
      rl_agent
    )

    ## System dependencies are found with CMake's conventions
    # find_package(Boost REQUIRED COMPONENTS system)
    ...
    ## Declare a cpp executable
    # add_executable(rgbd_tools_node src/rgbd_tools_node.cpp)

    add_executable(experiment src/rl.cc)
    # target_link_libraries(experiment agentlib envlib ${catkin_LIBRARIES})
    target_link_libraries(experiment ${catkin_LIBRARIES})

    #add_executable(image_converter src/image_converter.cpp)
    ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM