Changes between Version 10 and Version 11 of toolchain/install


Ignore:
Timestamp:
Feb 10, 2017, 3:48:41 PM (8 years ago)
Author:
Bayard Gildas
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • toolchain/install

    v10 v11  
    4747 * For an Intel graphic card, it's a little bit more complicated, due to several versions and path for the libraries.
    4848The idea is that we're using the system video card driver since it's not included in robomap3.
     49
    4950The 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.
    50 To debug this you should launch your 3D graphic program (eg: simulator) with the LIBGL_DEBUG env var set to verbose
     51
     52To debug this you should launch your 3D graphic program (eg: simulator) with the LIBGL_DEBUG environment variable set to verbose.
    5153For example
    5254{{{
     
    5557Notice 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) }}}
    5658This 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).
    57 The version of libstdc++ included in robomap3 probably doesn't define this symbol. You can make sure with {{{ strings /.../robomap3/1.7.3/core2-64/sysroots/core2-64-poky-linux/usr/lib/libstdc++.so.6 | grep CXXABI_ }}}.
     59The version of libstdc++ included in robomap3 probably doesn't define this symbol. You can make sure with
     60{{{
     61strings /.../robomap3/1.7.3/core2-64/sysroots/core2-64-poky-linux/usr/lib/libstdc++.so.6 | grep CXXABI_
     62}}}.
    5863So we need to preload the libstdc++ library of the system to avoid robomap3 one to be loaded.
    59 To achieve this we need to set the LD_PRELOAD environment variable like this {{{ LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./LineFollower_simulator_nrt ... }}}
     64To achieve this we need to set the LD_PRELOAD environment variable like this
     65{{{
     66LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./LineFollower_simulator_nrt ...
     67}}}
     68
    6069
    6170Stopping here may be enough, but you then can see errors like {{{ i965_dri.so: undefined symbol: nouveau_drm_new }}}.
     71
    6272Same 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).
     73
    6374Same solution: preload the local system library.
    6475Repeat this until all unresolved symbols are gone.
     76
    6577On ubuntu 16.10 with robomap3 1.7.3, I ended up with the following
    6678{{{
    6779LD_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 ...
     80}}}
     81To 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
     82{{{
     83export 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
    6884}}}
    6985