ROS catkin build - не удается найти общую библиотеку - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь упростить сборку этого пакета 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 /

Iпробовал следующее:

(1) export / 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 голосов
/ 05 марта 2019

Я столкнулся с той же проблемой.Я внес следующие изменения на основе этого поста в ответах ROS и комментария ниже в универсальном файле CMakeLists.txt для макроса catkin_packages:

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

Я сделал несколько вещей, чтобы исправитьthis ...

  1. Добавлен LIBRARIES agentlib в макрос catkin_packages в файле rl_agent/CMakeLists.txt.Это делает библиотеку agentlib доступной позже для rl_experiment.
  2. Добавлен LIBRARIES envlib в макрос catkin_packages в файле rl_env/CMakeLists.txt.Это делает библиотеку envlib доступной позже для rl_experiment.
  3. Удалено agentlib и envlib из макроса target_link_libraries в файле rl_experiment/CMakeLists.txt.Это не обязательно.
  4. Проверенные пакеты rl_agent и rl_env перечислены в макросе find_package rl_experiment/CMakeLists.txt.

... тогда все успешно скомпилировано.

Добавление фрагментов для дальнейшего уточнения ...

  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)

    ...
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
    )

    ...
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)
    ...
...