Format de fichier non reconnu; le traiter comme linker script à l'aide de GCC
Je suis assez nouveau pour les Makefiles et je suis en train de construire un exécutable à partir de 3 fichiers, fichier1.c fichier2.c, et fichier1.h dans un fichier exécutable appelé exFile. Voici ce que j'ai:
all: exFile
exFile: file1.o file2.o
gcc -Wall -g -m32 repeat.o show.o -o repeat
file1.o: file1.c file1.h
gcc -Wall -g -m32 -S file1.c -o file1.o
file2.o: file2.c
gcc -Wall -g -m32 -S file2.c -o file2.o
J'ai cherché sur le web pour les makefiles dans ce format, mais je suis venu les mains vides, donc je me demandais si quelqu'un peut aider. Quand il essaie de compiler j'obtiens:
usr/bin/ld:file1.o:1: file format not recognized; treating as linker script
J'ai compilé les programmes à l'aide de fichiers d'assemblage, mais je ne suis pas sûr que faire avec c les fichiers ou le fichier1.h fichier. fichier1.c comprend fichier1.h j'ai donc de faire le lien (je crois?). Des suggestions ou des liens de référence serait apprécié
OriginalL'auteur user695978 | 2011-04-07
Vous devez vous connecter pour publier un commentaire.
Vous avez deux problèmes avec votre
gcc
de ligne de commande. Tout d'abord, vous êtes en précisant le-S
drapeau, ce qui provoque la gcc pour émettre le code d'assemblée, plutôt que le code objet. Deuxièmement, vous êtes absent le-c
drapeau, lequel indique gcc pour compiler le fichier pour un fichier de l'objet, mais pas le lien. Si vous venez de supprimer-S
et de ne rien changer d'autre, vous vous retrouverez avec un programme exécutable nomméfile1.o
et un autre nomméfile2.o
, plutôt que de l'objet de deux fichiers.En plus de ces erreurs, vous pouvez simplifier votre makefile par l'utilisation de modèle de règles. Je vous suggère d'essayer ce qui suit:
Ou, comme EmployedRussian points, vous pouvez aller avec quelque chose d'encore plus minimaliste qui met à profit plus de fonctionnalités de GNU make:
Russe: oups, merci pour la capture de cette faute de frappe (copié à partir de l'OP). Pour simplifier le makefile, oui, il pourrait être plus simple, mais je ne suis pas sûr de le faire serait d'aider les OP à comprendre la situation, étant donné que ce n'est pas le makefile structure qui a été à l'origine des problèmes.
Yep qu'il a fait merci beaucoup tout le monde.
OriginalL'auteur Eric Melski
La
-S
passer à gcc dit-il à la sortie de l'assembleur donc:Est de mettre à l'assembleur en
file1.o
mais que vous souhaitez, sans doute, de compilerfile1.c
en code objet:Lorsque l'éditeur de liens de votre
file1.o
il est confus parce quefile1.o
est de l'assembleur lorsque l'éditeur de liens attend le code de l'objet, d'où ton erreur.Afin de se débarrasser de la
-S
commutateurs pourfile1.o
etfile2.o
.Qu'advient-il si vous
file file1.o
pour obtenir le type de fichier?OriginalL'auteur mu is too short