Robotics StackExchange | Archived questions

ROS2 interfacing with gazebo causes gzserver: symbol lookup error

Trying to make a plugin for gazebo connected with ROS2. I am using the rclcpp API but creating subscriptions is cauting errors. The load function is shown below:

void Load(physics::WorldPtr _world, sdf::ElementPtr _sdf)
{

    int argc = 0;
    char **argv = NULL;
    rclcpp::init(argc, argv);
    // rclcpp::spin(std::make_shared<MinimalSubscriber>());
    // rclcpp::shutdown();
    auto node = rclcpp::Node::make_shared("ObiWan");
    node->create_subscription<std_msgs::msg::String>(
        "topic",
        10,
        [node](std_msgs::msg::String::UniquePtr msg) {
            RCLCPP_INFO(node->get_logger(), "I heard: '%s'", msg->data.c_str());
        });


    //Logs to node log, pretty cool really! :D
    RCLCPP_INFO(node->get_logger(),
                "PLease help me kenobi '%s'", node->get_name());
}

The problem seems to arrive when calling the create_subscription(...).

I get the error:

gzserver: symbol lookup error: /home/lars/gaz-tryout3/build/libhello_world.so: undefined symbol: _ZN22rosidl_typesupport_cpp31get_message_type_support_handleIN8std_msgs3msg7String_ISaIvEEEEEPK29rosidl_message_type_support_tv

any ideas for a fix, or some info on why this is happening?

Running gazebo9 ROS2 dashing and ros-dashing-gazebo-ros-pkgs

cmake_minimum_required(VERSION 3.5 FATAL_ERROR)
set (CMAKE_CXX_STANDARD 11)
find_package(gazebo REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)

include_directories(${rclcpp_INCLUDE_DIRS})
include_directories(${std_msgs_INCLUDE_DIRS})
include_directories(${GAZEBO_INCLUDE_DIRS})
link_directories(${GAZEBO_LIBRARY_DIRS})
list(APPEND CMAKE_CXX_FLAGS "${GAZEBO_CXX_FLAGS}")

add_library(hello_world SHARED hello_world.cc)
target_link_libraries(hello_world ${GAZEBO_LIBRARIES} ${rclcpp_LIBRARIES})

You were right, forgot to link the std_msgs. I linked them properly and now it works :)

target_link_libraries(hello_world ${GAZEBO_LIBRARIES} ${rclcpp_LIBRARIES} ${std_msgs_LIBRARIES})

If anybody needs the same

Asked by fremad on 2019-08-05 12:34:14 UTC

Comments

Could you also give your CMakeLists.txt? It looks to me as if you don't link correctly to your std_msgs packages and/or haven't sourced your ROS2 installation correctly before building.

Asked by Karsten on 2019-08-05 14:15:33 UTC

Please edit your original question text, comments are not suited for posting code or build scripts.

Use the edit button/link for that.

Asked by gvdhoorn on 2019-08-05 14:25:58 UTC

Please post the last part of your question text (that you added in your last edit) as an answer and accept your own answer.

That will show clearly that your question was answered.

Asked by gvdhoorn on 2019-08-05 14:39:16 UTC

Answers