C: la Création de bibliothèque statique et en les reliant à l'aide d'un Makefile

Je suis en train de comprendre les Bibliothèques statiques et partagées.

Je veux faire de la suivante pour créer un fichier makefile qui ne séparée compilation et la liaison tel qu'une bibliothèque statique est créée et liée
dans la formation de la finale de la statique exécutable.

J'ai le code suivant pour le Makefile, mais j'obtiens l'erreur suivante

Makefile:13: *** missing separator. Stop.

Mais je suis aussi en train d'essayer de comprendre comment se fait le lien/créer des bibliothèques.

Si j'exécute les commandes après line 12 dans le terminal, mais pas dans le fichier makefile.

myProgram: main.o addSorted.o freeLinks.o
    gcc -lm -o myProgram main.o addSorted.o freeLinks.o

main.o: main.c
    gcc -O -c -lm main.c main.h

addSorted.o: addSorted.c addSorted.h
    gcc -O -c -lm addSorted.c

freeLinks.o: freeLinks.c freeLinks.h
    gcc -O -c -lm freeLinks.c

ar rc libmylib.a main.o addSorted.o freeLinks.o    //Error Line

ranlib libmylib.a

gcc -o foo -L. -lmylib foo.o

clean:
    rm -f myProgram main.o addSorted.o freeLinks.o

Aussi, si vous pouvez aider à l'amélioration du code, je voudrais vraiment l'apprécier.

  • double possible de l'erreur: manque séparateur
  • Les trois ar, ranlib et gcc lignes sont censés être la recette pour quelle cible?
  • Je suis nouvelle C/makefile et les bibliothèques. Je suppose que pour myProgram. C'est pourquoi j'ai besoin d'aide. Aussi la ligne où j'obtiens l'erreur, ne contient pas de tab
  • Q: "la ligne où j'obtiens l'erreur, ne contient pas d'onglet..." A: C'est ça le problème. Vous avez besoin d'une "cible" (par exemple,mylib.a, justifié à gauche), suivie par deux lignes qui commencent par un "onglet" (ar rc libmylib.a main.o addSorted.o freeLinks.o, puis ranlib libmylib.a). Les deux lignes doivent être consécutives (pas intervenir les lignes vides). Voici un bon tutoriel: Un Simple fichier Makefile Tutoriel
  • la gcc de l'éditeur de liens gère les paramètres de ligne de commande dans l'ordre dans lequel ils sont répertoriés. l'éditeur de liens ne sera pas inclure quoi que ce soit à partir d'une bibliothèque, sauf si il y a un suspens nom de satisfaire les besoins. par conséquent, rien ne sera lié à partir de la bibliothèque de mathématiques. Suggèrent de déplacer le "- lm " à la fin de la ligne de commande liens.
  • le compilateur gcc a absolument pas besoin de bibliothèques externes., donc le compiler les déclarations ne devraient pas avoir '-lm'
  • le format d'un fichier makefile règle est la suivante: 1) destinationFile : source de toutes les autres dépendances 2) chaque ligne de commande suivant la première ligne doit être en retrait, avec un onglet. Les lignes de votre problème à un ne sont pas correctement mis en forme

InformationsquelleAutor user3337714 | 2015-07-15