wiki:toolchain/install

Version 16 (modified by Sanahuja Guillaume, 2 years ago) (diff)

--

Installation des chaînes de compilation

La chaîne de compilation croisée permet de compiler sur votre ordinateur des programmes pour la cible. La chaîne de compilation permet de compiler sur votre ordinateur des programmes pour votre ordinateur. Les 2 chaînes de compilation ne supportent que les distributions 64 bits.

Les chaines ont été construites avec le projet robomap3.

Cross toolchain for armv7a-neon (ardrone2, bebop, hds x8)

$ cd ~
$ wget https://uav.hds.utc.fr/src/toolchain/x86_64-meta-toolchain-flair-armv7a-neon.sh
$ chmod +x x86_64-meta-toolchain-flair-armv7a-neon.sh
$ sudo ./x86_64-meta-toolchain-flair-armv7a-neon.sh
$ rm x86_64-meta-toolchain-flair-armv7a-neon.sh

Cross toolchain for armv5e (mambo)

$ cd ~
$ wget https://uav.hds.utc.fr/src/toolchain/x86_64-meta-toolchain-flair-armv5e.sh
$ chmod +x x86_64-meta-toolchain-flair-armv5e.sh
$ sudo ./x86_64-meta-toolchain-flair-armv5e.sh
$ rm x86_64-meta-toolchain-flair-armv5e.sh

Toolchain for x86_64

$ cd ~
$ wget https://uav.hds.utc.fr/src/toolchain/x86_64-meta-toolchain-flair-x86_64.sh
$ chmod +x x86_64-meta-toolchain-flair-x86_64.sh
$ sudo ./x86_64-meta-toolchain-flair-x86_64.sh
$ rm x86_64-meta-toolchain-flair-x86_64.sh

Variables d’environnement

Les scripts d'installation des toolchains ajoutent des variables dans le .bashrc. Afin de positionner ces variables et de les utiliser dans le même terminal ou un terminal déjà ouvert, recharger votre .bashrc

$ source ~/.bashrc

Installation des drivers graphiques (maybe deprecated)

  • Si vous possédez une carte vidéo type nvidia, il faut copier les librairies dans la toolchain:
    $ sudo cp -r /usr/lib/nvidia-340/* /opt/robomap3/1.7.3/core2-64/sysroots/core2-64-poky-linux/usr/lib 
    
  • Pour une carte vidéo de type ATI:
    $ sudo cp -r /usr/lib/fglrx/* /opt/robomap3/1.7.3/core2-64/sysroots/core2-64-poky-linux/usr/lib 
    
  • For an Intel graphic card, it's a little bit more complicated, due to several versions and path for the libraries.

The idea is that we're using the system video card driver since it's not included in robomap3.

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.

To debug this you should launch your 3D graphic program (eg: simulator) with the LIBGL_DEBUG environment variable set to verbose. For example

$ LIBGL_DEBUG=verbose ./LineFollower_simulator_nrt -n x4_0 -t x4 -a 127.0.0.1 -p 9000 -x setup_x4.xml (...)

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) . 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). 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_ 

So we need to preload the libstdc++ library of the system to avoid robomap3 one to be loaded. 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 ...

Stopping here may be enough, but you then can see errors like i965_dri.so: undefined symbol: nouveau_drm_new .

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).

Same solution: preload the local system library. Repeat this until all unresolved symbols are gone.

On ubuntu 16.10 with robomap3 1.7.3, I ended up with the following

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 ...

To 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

export 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

Not installing the toolchains in default location

If the toolchains were not installed in the default location, you must compile all by yourself using this page.