C++ ROS catkin构建-找不到共享库

C++ ROS catkin构建-找不到共享库,c++,linker,ros,catkin,C++,Linker,Ros,Catkin,我正在尝试catkin构建此ROS包,但它无法构建“rl_实验”,出现以下错误: /usr/bin/ld: cannot find -lagentlib /usr/bin/ld: cannot find -lenvlib collect2: error: ld returned 1 exit status 我用的是ROS。共享库确实存在于文件夹/texplore/devel/.private/rl_env/lib/和/texplore/devel/.private/rl_agent/lib/中

我正在尝试catkin构建此ROS包,但它无法构建“rl_实验”,出现以下错误:

/usr/bin/ld: cannot find -lagentlib
/usr/bin/ld: cannot find -lenvlib
collect2: error: ld returned 1 exit status
我用的是ROS。共享库确实存在于文件夹/texplore/devel/.private/rl_env/lib/和/texplore/devel/.private/rl_agent/lib/中,符号链接位于/texplore/devel/lib/

我尝试了以下方法:

(1) 导出/texplore/devel/lib/到LD\u库路径

(2) 向/texplore/src/rl_实验/src中的库添加符号链接

(3) 将库路径添加到目标链接库

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_库中添加链接器路径?我以前构建过ROS软件包,但无法理解为什么这个软件包不起作用。

我遇到了同样的问题。我根据ROS答案和catkin_packages宏的generic CMakeLists.txt文件中的以下注释做出了以下更改:

## LIBRARIES: libraries you create in this project that dependent projects also need
我做了一些事情来解决这个问题

  • 增加
    LIBRARIES-agentlib
    rl\u-agent/CMakeLists.txt
    文件中的
    catkin\u-packages
    宏。这使得
    agentlib
    库稍后可用于
    rl\u实验
  • rl_env/CMakeLists.txt
    文件中的
    catkin_packages
    宏中添加了
    LIBRARIES envlib
    。这使得
    envlib
    库稍后可用于
    rl\u实验
  • rl\u实验/CMakeLists.txt
    文件中的
    target\u link\u库
    宏中删除了
    agentlib
    envlib
    。这些是没有必要的
  • 已验证的
    rl\u代理
    rl\u环境
    包列在
    rl\u实验/CMakeLists.txt的
    find\u包
    宏中
  • …然后所有内容都成功编译

    正在添加片段以进一步澄清

  • rl_agent CMakeLists.TXT更改(上文第1项):
  • rl_env CMakeLists.txt更改(上文第2项):
  • rl_experience CMakeLists.txt更改(上述第3项和第4项):

  • 我遇到了同样的问题。我根据ROS答案和catkin_packages宏的generic CMakeLists.txt文件中的以下注释做出了以下更改:

    ## LIBRARIES: libraries you create in this project that dependent projects also need
    
    我做了一些事情来解决这个问题

  • 增加
    LIBRARIES-agentlib
    rl\u-agent/CMakeLists.txt
    文件中的
    catkin\u-packages
    宏。这使得
    agentlib
    库稍后可用于
    rl\u实验
  • rl_env/CMakeLists.txt
    文件中的
    catkin_packages
    宏中添加了
    LIBRARIES envlib
    。这使得
    envlib
    库稍后可用于
    rl\u实验
  • rl\u实验/CMakeLists.txt
    文件中的
    target\u link\u库
    宏中删除了
    agentlib
    envlib
    。这些是没有必要的
  • 已验证的
    rl\u代理
    rl\u环境
    包列在
    rl\u实验/CMakeLists.txt的
    find\u包
    宏中
  • …然后所有内容都成功编译

    正在添加片段以进一步澄清

  • rl_agent CMakeLists.TXT更改(上文第1项):
  • rl_env CMakeLists.txt更改(上文第2项):
  • rl_experience CMakeLists.txt更改(上述第3项和第4项):

  • 我试过了,但还是有同样的错误。从克隆github开始,我已经复制了好几次了。我正在使用最新的柳絮工具。如果我提供我的CMakeLists.txt文件会有帮助吗?是的,那肯定会有帮助。原始答案中添加了代码片段。我希望这有帮助!非常感谢。添加target_link_库(实验${catkin_libraries})(第3项)为我做到了这一点。我已经尝试过了,但仍然出现同样的错误。Bummer。从克隆github开始,我已经复制了好几次了。我正在使用最新的柳絮工具。如果我提供我的CMakeLists.txt文件会有帮助吗?是的,那肯定会有帮助。原始答案中添加了代码片段。我希望这有帮助!非常感谢。添加target_link_库(实验${catkin_库})(第3项)对我有帮助。
        ...
        ###################################
        ## catkin specific configuration ##
        ###################################
        ...
        catkin_package(
           INCLUDE_DIRS include
           LIBRARIES envlib
        #  CATKIN_DEPENDS roscpp rospy std_msgs
           CATKIN_DEPENDS message_runtime
        #  DEPENDS system_lib
        )
    
        ...
    
        ...
        ## 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)
        ...