Changes between Version 12 and Version 13 of troubleshooting


Ignore:
Timestamp:
Feb 18, 2019, 2:14:19 PM (6 years ago)
Author:
Sanahuja Guillaume
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • troubleshooting

    v12 v13  
    2121* check if ''/dev/shm'' is clean. It should not contain files like ''sem.simu_*'' or ''simu_*''. The files are shared memories between control and simulation part; they should be destroyed when all programs are closed. You can safely remove it manually if not.
    2222* if problem is still present, make [https://devel.hds.utc.fr/software/flair/newticket a new ticket] describing your problem and the output message of the simulator.
     23
     24== Simulator does not start (libGL error) ==
     25
     26If you have a message like this one at executing the simulator:
     27{{{
     28libGL error: unable to load driver: i965_dri.so
     29}}}
     30
     31The idea is that we're using the system video card driver since it's not included in robomap3.
     32
     33The driver itself (eg: i965_dri.so) should be loaded automatically (from /usr/lib/x86_64-linux-gnu/dri/). But this driver may not succesfully load since it requires some specific library versions that may not match robomap3's.
     34
     35To debug this you should launch your 3D graphic program (eg: simulator) with the LIBGL_DEBUG environment variable set to verbose.
     36For example
     37{{{
     38$ LIBGL_DEBUG=verbose ./LineFollower_simulator_nrt -n x4_0 -t x4 -a 127.0.0.1 -p 9000 -x setup_x4.xml (...)
     39}}}
     40Notice the line that look like {{{ libstdc++.so.6: version `CXXABI_1.3.9' not found (required by /usr/lib/x86_64-linux-gnu/dri/i965_dri.so) }}}.
     41This means that the local system driver needs a version of libstdc++.so.6 that defines the symbol CXXABI_1.3.9 (meaning application binary interface version 1.3.9).
     42The version of libstdc++ included in robomap3 probably doesn't define this symbol. You can make sure with
     43{{{
     44strings /.../robomap3/1.7.3/core2-64/sysroots/core2-64-poky-linux/usr/lib/libstdc++.so.6 | grep CXXABI_
     45}}}
     46So we need to preload the libstdc++ library of the system to avoid robomap3 one to be loaded.
     47To achieve this we need to set the LD_PRELOAD environment variable like this
     48{{{
     49LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./LineFollower_simulator_nrt ...
     50}}}
     51
     52
     53Stopping here may be enough, but you then can see errors like {{{ i965_dri.so: undefined symbol: nouveau_drm_new }}}.
     54
     55Same problem: the driver needs a version of a library (here libdrm_nouveau.so.2) which defines a specific symbol that doesn't exist in robomap3 version (yet).
     56
     57Same solution: preload the local system library.
     58Repeat this until all unresolved symbols are gone.
     59
     60* On ubuntu 16.10 with robomap3 1.7.3, I ended up with the following
     61{{{
     62LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6:/usr/lib/x86_64-linux-gnu/libdrm_intel.so.1:/usr/lib/x86_64-linux-gnu/libdrm_nouveau.so.2:/usr/lib/x86_64-linux-gnu/libdrm_radeon.so.1  ./LineFollower_simulator_nrt -n x4_0 -t x4 ...
     63}}}
     64
     65* On mint 19.1 with robomap 2.1.3, I ended up with the following
     66{{{
     67LD_PRELOAD=/lib/x86_64-linux-gnu/libm.so.6:/usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./LineFollower_simulator_nrt -n x4_0 -t x4 ...
     68}}}
     69
     70
     71To avoid setting this variable every time, you can modify the script used to launch the program (usually in build/bin, eg: simulator_xx.sh) and add this line __after__ the first one
     72{{{
     73export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6:/usr/lib/x86_64-linux-gnu/libdrm_intel.so.1:/usr/lib/x86_64-linux-gnu/libdrm_nouveau.so.2:/usr/lib/x86_64-linux-gnu/libdrm_radeon.so.1
     74}}}
    2375
    2476== Problem when updating the repositories ==