2017-09-04 10 views
3

J'ai un problème étrange. J'ai déjà utilisé GNU make pour les 4 dernières semaines sans problèmes. Je pointe mon fichier make vers un toolchain avr pour compiler croisé pour un processeur ATMEL. Il y a quelques jours, GNU make a cessé de fonctionner. Quand je lance make je reçois la sortie suivante:GNU make code d'erreur (e = -1)

make (e=-1): Error -1 
    make: *** [main.o] Error -1 

Pour essayer d'obtenir un meilleur aperçu du problème, je courais le code avec juste la sortie d'écho en utilisant make -n. Il imprime toutes les instructions du fichier Make, y compris les commandes. Un court extrait de cette sortie est la suivante:

echo 
    echo "==================================" 
    echo "Compiling: " main.c 
    echo "==================================" 
    "/c/Users/Shane Reynolds/Documents/CDU_embeddedSystems/CDUEmbeddedToolbox/avr_tools/bin/avr-gcc" -c -std=gnu99 -g -mmcu=atmega1281 -DF_CPU=16000000UL -Wall -Wstrict-prototypes -Os main.c -o main.o 

Vous pouvez voir que la commande est imprimée à la fin de ce court extrait de la sortie. Si je copie et colle la commande dans le terminal alors le processus fonctionne bien - mais faire cela à chaque fois est ennuyeux. Pour essayer de comprendre pourquoi GNU make échouait, j'ai exécuté la balise de débogage make -d et j'ai reçu beaucoup de sortie. L'extrait de ce que je pense est important est:

CreateProcess(C:\Users\Shane Reynolds\Documents\CDU_embeddedSystems\CDUEmbeddedToolbox\avr_tools\utils\bin\echo.exe,echo,...) 
    Putting child 0x0043fdf0 (main.o) PID 4486808 on the chain. 
    Live child 0x0043fdf0 (main.o) PID 4486808 
    Main thread handle = 0x000000a8 

    Reaping winning child 0x0043fdf0 PID 4486808 
    Live child 0x0043fdf0 (main.o) PID 4488168 
    Reaping losing child 0x0043fdf0 PID 4488168 
    make (e=-1): Error -1 
    make: *** [main.o] Error -1 
    Removing child 0x0043fdf0 PID 4488168 from chain. 

Quelqu'un peut-il m'aider avec cela? J'ai passé quelques jours à essayer de comprendre cela. J'espère vraiment que ce n'est pas quelque chose d'évident, ou simple.

EDIT: pour ajouter un peu plus d'arrière-plan, j'utilise ceci sur Windows 8 - quand j'exécute make à partir de bash ou de cmd je reçois le même message d'erreur. Le lien vers mon makefile est:

https://pastebin.com/j7uMSLic

EDIT DE PLUS: J'ai créé un Makefile très simple avec un code source très simple - l'exécution de ce produit la même erreur, mais je peux utiliser l'AVR toolchain pour compiler et lier manuellement comme dans le cas précédent.

+0

Êtes-vous sûr à 100% que ce n'est pas une erreur de compilation dans votre code? Je sais que c'est assez évident, mais parfois nos yeux sont attirés au mauvais endroit ... – John3136

+0

J'utilise la chaîne d'outils AVR pour compiler. L'exécution du code qui utilise la commande 'avr-gcc' fonctionne correctement - je peux créer manuellement les fichiers' .o', '.elf' et' .hex'. Je n'ai aucun problème pour charger le programme sur le processeur cible. De ma compréhension, make est juste un script qui pointe vers les différents outils que vous voulez utiliser pour la compilation. –

+0

Utilisez-vous '-j'? Si des constructions parallèles se produisent, la sortie de make peut prêter à confusion ... – o11c

Répondre

1

OK.

Il s'est avéré que c'était quelque chose à voir avec Git bash (le terminal que j'utilisais). Quelque part, d'une certaine manière, je pense que l'une des variables de chemin a été chamboulée. J'ai complètement désinstallé Git, puis je l'ai réinstallé et ça marche bien maintenant. Je ne sais pas comment cela s'est passé, mais je suis content de l'avoir réparé.

Si quelqu'un d'autre a une explication, ou peut ajouter plus de perspicacité au problème et comment il peut être évité alors n'hésitez pas à poster ci-dessous.