J'essaie de compiler un fichier Pro * C sur gcc et j'obtiens cette erreur:
make: *** [MedLib_x.o] Error 1
C'est la commande imprimée par make:
/usr/bin/gcc -g -fPIC -m64 -DSS_64BIT_SERVER -I/home/med/src/common -
I/u01/app/oradb11r2/product/11.2.0/dbhome_3/rdbms/demo
-I/u01/app/oradb11r2/product/11.2.0/dbhome_3/rdbms/public
-I/u01/app/oradb11r2/product/11.2.0/dbhome_3/precomp/public
-I/u01/app/oradb11r2/product/11.2.0/dbhome_3/xdk/include INCLUDE=/u01/app/oradb11r2/product/11.2.0/dbhome_3/precomp/public -lnapi -ltabs -c MedLib_x.c
S'il vous plaît aidez-moi pourquoi cette erreur de faire est à venir? Bien que le fichier objet est également créé.
De GNU Faites une erreur avec l’appendice, car vous voyez que ce n’est pas une erreur Make mais une erreur venant de gcc.
«[Foo] Error NN» «[Foo] description du signal» Ces erreurs ne sont pas vraiment des erreurs du tout. Ils signifient qu’un programme qui a été appelé dans le cadre d’une recette a renvoyé un code d’erreur autre que 0 (‘Erreur NN’), qui interprète comme un échec, ou s’est arrêté de manière anormale (avec un signal quelconque). Voir Erreurs dans les recettes . Si aucun *** n'est attaché au message, le sous-processus a échoué, mais la règle dans le fichier makefile était précédée du caractère - spécial, de sorte que l'erreur a été ignorée.
Donc, pour attaquer le problème, le message d'erreur de gcc est requis. Collez la commande dans le Makefile directement dans la ligne de commande et voyez ce que dit gcc. Pour plus de détails sur les erreurs, cliquez ici.
J'ai eu la même chose. Lancer "make" et cela échoue avec juste ce message.
% make
make: *** [all] Error 1
Cela était dû à une commande dans une règle se terminant avec un statut de sortie non nul. Par exemple. imaginez ce qui suit (stupide) Makefile
:
all:
@false
echo "hello"
Cela échouerait (sans l’impression "hello") avec le message ci-dessus puisque false
se termine avec le statut de sortie 1.
Dans mon cas, j’essayais d’être intelligent et de faire une sauvegarde d’un fichier avant de le traiter (afin de pouvoir comparer le fichier nouvellement généré avec le précédent). Je l'ai fait en ayant une règle dans ma Make
qui ressemblait à ceci:
@[ -e $@ ] && mv $@ [email protected]
... ne réalisant pas que si le fichier cible n'existe pas, la construction ci-dessus se ferme (sans exécuter la commande mv
) avec le statut de sortie 1 et toutes les commandes suivantes de cette règle échouent. Réécrire ma ligne défectueuse pour:
@if [ -e $@ ]; then mv $@ [email protected]; fi
Résolu mon problème.
Parfois, vous obtiendrez de nombreuses sorties du compilateur avec de nombreux avertissements et aucune ligne De sortie indiquant "erreur: vous avez fait quelque chose de mal ici", mais il y avait toujours une erreur. Un exemple de ceci est un fichier d’en-tête manquant - le compilateur dit quelque chose comme "aucun fichier de ce type" mais pas "erreur: aucun fichier de ce type", puis il se termine avec un code de sortie non nul quelque temps plus tard (peut-être après de nombreux avertissements). Make va bombarder avec un message d'erreur dans ces cas!
Dans mon cas, il y avait une variable statique qui n'était pas initialisée. Lorsque je l'ai initialisé, l'erreur a été supprimée. Je ne connais pas la logique derrière cela, mais a fonctionné pour moi. Je sais que c'est un peu tard, mais d'autres personnes ayant le même problème pourraient obtenir de l'aide.