47 | | * For an Intel graphic card, it's a little bit more complicated, due to several versions and path for the libraries. In most of cases, those commands are enough to make it work : |
| 47 | * For an Intel graphic card, it's a little bit more complicated, due to several versions and path for the libraries. |
| 48 | The idea is that we're using the system video card driver since it's not included in robomap3. |
| 49 | The 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 | For example |
53 | | Note that there is a bug with Intel cards and output of virtual cameras is disabled. So you will not be able to do image processing with such a card. |
| 55 | Notice 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) }}} |
| 56 | This 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_ }}}. |
| 58 | So 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 ... }}} |
55 | | __NB__: please adapt the source/destination paths to your case |
| 61 | Stopping here may be enough, but you then can see errors like {{{ i965_dri.so: undefined symbol: nouveau_drm_new }}}. |
| 62 | Same 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). |
| 63 | Same solution: preload the local system library. |
| 64 | Repeat this until all unresolved symbols are gone. |
| 65 | On ubuntu 16.10 with robomap3 1.7.3, I ended up with the following |
| 66 | {{{ |
| 67 | 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 ./LineFollower_simulator_nrt -n x4_0 -t x4 ... |
| 68 | }}} |