Undefined Symbol bei shared library

  • Hallo,

    Ich und eine Kollegin schreiben ein Plugin in für den Robtersimulator Gazebo.
    Im Grunde werden dazu einfach shared libraries geladen. Die Systems Specs auf beiden Systemen shcauen so aus:


    • 3.8.0-32-generic #47~precise1-Ubuntu SMP Wed Oct 2 16:19:35 UTC 2013 x8664 x8664 x86_64 GNU/Linux
    • g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
    • ldd (Ubuntu EGLIBC 2.15-0ubuntu10.5) 2.15
    • ROS Fuerte
    • Gazebo 1.9 and Gazebo 1.8.6

    Beim Laden des Plugins bekomme ich den Fehler:

    Error [Plugin.hh:127] Failed to load plugin /home/user/eclipse_ws/plugin_cmds/libtaurob_plugin_ros.so: /home/user/eclipse_ws/plugin_cmds/libtaurob_plugin_ros.so: undefined symbol: _ZN3ros7console13g_initializedE

    Kompelliert meine Kollegin die Library so funktioniert es, wenn ich sie auf meinem System verwende.

    Die Ausgabe von ldd siehr auch ok aus

    Die CMakeLists.txt sieht so aus

    Wie kann am besten solche Fehler am besten debuggen?? Bzw. Vielleicht sieht ja einer den Fehler?

    MFG

    “For God's sake, give me the young man who has brains enough to make a fool of himself”, Robert Louis Stevenson

  • Error [Plugin.hh:127] Failed to load plugin /home/user/eclipse_ws/plugin_cmds/libtaurob_plugin_ros.so: /home/user/eclipse_ws/plugin_cmds/libtaurob_plugin_ros.so: undefined symbol: _ZN3ros7console13g_initializedE


    Und, ist das Symbol drin?

    Code
    nm /home/user/eclipse_ws/plugin_cmds/libtaurob_plugin_ros.so | grep initializedE
    Zitat

    Kompelliert meine Kollegin die Library so funktioniert es, wenn ich sie auf meinem System verwende.


    Wenn du bei dir kompilierst, funktioniert die Library bei dir nicht, aber wenn sie kompiliert, funktioniert sie bei dir schon? Was ist auf ihrem System?

    *plantsch*

  • Hey Plantschkuh!

    Vielen Dank für deine schnelle Antwort!

    Hier der output von nm bei meiner library:

    nm -a libtaurob_plugin_ros.so | grep initializedE
    [CODE]
    U _ZN3ros7console13g_initializedE
    000000000003438c W _ZN5boost6detail13sp_ms_deleterIN13geometry_msgs6Twist_ISaIvEEEE15set_initializedEv
    [\CODE]

    Der Befehl nm libtaurob_plugin_ros.so | grep initializedE | c++filt liefert das
    [CODE]
    U ros::console::g_initialized
    000000000003438c W boost::detail::sp_ms_deleter<geometry_msgs::Twist_<std::allocator<void> > >::set_initialized()
    [\CODE]

    Das Symbol ist Unidentified.

    Bei der Lib von meiner Kollegin kommt das gleiche raus !?!?!?

    nm libtaurob_plugin_ros_ceci.so | grrep initializedE
    [CODE]
    U _ZN3ros7console13g_initializedE
    0000000000034206 W _ZN5boost6detail13sp_ms_deleterIN13geometry_msgs6Twist_ISaIvEEEE15set_initializedEv
    [\CODE]

    Also ich steh auf der Leitung.

    “For God's sake, give me the young man who has brains enough to make a fool of himself”, Robert Louis Stevenson

  • Hey habe das in CMakeLists.txt vergessen

    find_package(roscpp). Jetzt wird richtig verlinked

    taurob.llibrosconsole.so => /opt/ros/fuerte/lib/librosconsole.so (0x00007ff940ff0000)

    “For God's sake, give me the young man who has brains enough to make a fool of himself”, Robert Louis Stevenson

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!