Compilation croisée pour ARM avec Autoconf

Je ne parviens pas à comstackr de manière croisée une bibliothèque pour ma carte de arm à l’aide de autconf.

J’utilise cette ligne:

./configure --target=arm-linux --host=arm-linux --prefix=/bla/bla/bla/linux_arm_tool CFLAGS='-m32' make make install 

Quand je file pour le vérifier, je reçois:

 libjpeg.so.8.4.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, not ssortingpped 

Cela ne semble pas du tout correct, mais j’ai quand même essayé de l’utiliser … et je reçois:

 /usr/lib/gcc/arm-linux-gnueabi/4.5.3/../../../../arm-linux-gnueabi/bin/ld: skipping incompatible /bla/bla/bla/bla/../linux_arm_tool/lib/libjpeg.so when searching for -ljpeg 

Je suis perdue, cela fait déjà une heure que je cherche dans Google.

Donc, je savais que j’avais fait une compilation croisée avant d’utiliser des appels de méthode vraiment basiques et j’ai compris pourquoi je m’étais échappé avant d’avoir examiné le résultat:

 checking for arm-linux-gnueabi-gcc... no checking for gcc... gcc ... ... checking for arm-linux-gnueabi-gcc... gcc 

Dans mon /usr/bin il n’y avait pas arm-linux-gnueabi-gcc , je devais:

 ln -s /usr/bin/arm-linux-gnueabi-gcc-4.5 /usr/bin/arm-linux-gnueabi-gcc 

J’ai compilé avec succès avec:

 ./configure --host=arm-linux-gnueabi -prefix=${CSTOOL_DIR}/linux_arm_tool 

en ce qui concerne les liens … Je dois encore vérifier certaines choses, mais je vais supposer que je pourrais avoir besoin de lancer des drapeaux -rpath-link dans des compilations plus avancées.

Je pense que le problème pourrait être reformulé plus généralement comme suit: “Comment utiliser Autoconf pour la compilation croisée pour ARM?”

Selon ./configure -h :

 System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-comstack to build programs to run on HOST [BUILD] 

La documentation officielle de GNU est utile pour répondre à cette question:

http://www.gnu.org/software/autoconf/manual/autoconf-2.67/html_node/Hosts-and-Cross_002dCompilation.html

Notez quand ils définissent l’utilisation de --host et de --build :

 Therefore, whenever you specify --host, be sure to specify --build too. 

Et voici un exemple que je viens d’utiliser pour configurer iperf pour ma plate-forme ARM intégrée:

Tout d’abord, le script “./configure” s’appelle “Autoconf”, ce qui est très utile pour Google. L’idée ici est de:

  • Avoir vos compilateurs croisés dans votre $ PATH actuel
  • Définissez les variables d’environnement CC et CXX pour qu’elles pointent vers les compilateurs croisés
  • Donne le droit –host et –build

     buildpath <--- my little script to setup my $PATH export CC=arm_v5t_le-gcc export CXX=arm_v5t_le-g++ ./configure --host=armv5tl-montavista-linux-gnueabi --build=x86_64-linux-gnu 

Vous devez remplacer les variables d’environnement CC, LD et autres variables pertinentes. Le réglage de ces commutateurs ne dit pas à configurer où se trouve votre chaîne d’outils croisés (cela peut être n’importe où)

Consultez des guides pour divers projets, par exemple: http://wiki.wxwidgets.org/Cross-Compiling_Under_Linux

En outre, voici un script que j’ai créé pour configurer cross-comstack pour node.js – même idée: https://gist.github.com/edhemphill/5094239

Le libjpeg ne va pas fonctionner car c’est un binary x86, vous devez le dire:

  ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, not ssortingpped 

ou similaire.

C’est la raison pour laquelle vous obtenez un skipping incompatible

 # Install arm-linux-gnueabi packages apt-get install libc6-armel-cross libc6-dev-armel-cross \ binutils-arm-linux-gnueabi arm-linux-gnueabi-gcc libncurses5-dev ./configure --target=arm-linux-gnueabi --host=arm-linux-gnueabi ... checking for arm-linux-gnueabi-gcc... arm-linux-gnueabi-gcc checking whether the C comstackr works... yes checking for C comstackr default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... yes checking for suffix of object files... o checking whether we are using the GNU C comstackr... yes checking whether arm-linux-gnueabi-gcc accepts -g... yes checking for arm-linux-gnueabi-gcc option to accept ISO C89... none needed checking whether arm-linux-gnueabi-gcc understands -c and -o together... yes checking whether make supports the include directive... yes (GNU style) checking dependency style of arm-linux-gnueabi-gcc... gcc3 ... make arm-linux-gnueabi-gcc -DPACKAGE_NAME=\"Tutorial\ Program\" -DPACKAGE_TARNAME=\"tutorial-program\" -DPACKAGE_VERSION=\"1.0\" -DPACKAGE_STRING=\"Tutorial\ Program\ 1.0\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DPACKAGE=\"tutorial-program\" -DVERSION=\"1.0\" -I. -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c