2016-02-12 4 views
0

J'essaie de compiler un SDK avec un compilateur gcc de bras incorporé dans cygwin. C'est un SDK basé sur makefile. Ma cible est un périphérique cortex m3. Mon problème est, le SDK a une implémentation de libc personnalisée pour la cible, et quand je compile avec le compilateur de bras (bras-aucun-eabi-gcc) il cherche à ramasser la libc de bras de GNU, pas la libc de SDK. Cela entraîne une erreur de compilation. Je suis certain que les makefiles sont corrects (j'ai copié et collé le SDK entier depuis un ordinateur où cela fonctionnait). Je n'ai plus accès à cet ordinateur pour essayer de vérifier/comparer les paramètres. Je ne sais pas comment empêcher le compilateur du bras gcc de chercher sa propre implémentation de la libc et de le pointer vers la bonne implémentation. Toute aide est grandement appréciée.bras gcc par défaut compilant sa libc

+0

Probablement votre SDK a, quelque part, un script qui définit toutes les variables d'environnement à utiliser avec le compilateur croisé gcc. Quelque chose que vous devez lancer en utilisant 'l'environnement d'installation de source'. Cela va définir les paramètres de la chaîne d'outils, sysroot, etc ... – LPs

Répondre

0

Il y a peut-être deux solutions:

  1. Créer un environnement spécifique à votre outil - la GNU toolchain utilise un certain nombre de variables d'environnement pour définir le comportement par défaut. Pour une chaîne d'outils personnalisée, vous devrez définir toutes les variables nécessaires pour remplacer les valeurs par défaut du système.
  2. Utilisez l'option de liaison -nostdlib et lien explicitement votre bibliothèque souhaitée et C Runtime le code de démarrage, de sorte que votre ligne de commande de liaison peut comprendre les éléments suivants:

    -nostdlib -L/usr/myarmtools/gcc/lib - crt0.o

  3. lc

Notez que -nostdlib supprime la liaison par défaut de libc libstdC++ et crt0.o, vous devez fournir le chemin de recherche (-L) aux bibliothèques ou les lier explicitement par leur chemin complet et le fichier nommez et liez le code de l'objet d'exécution C pour votre cible.

J'utilise l'option 2 de préférence car elle fonctionnera dans n'importe quel environnement. Cependant, si vous souhaitez utiliser des makefiles communs pour construire plusieurs cibles, l'option 1 peut être utile.