2010-09-02 11 views
1

Je pense avoir un problème avec mon makefile. J'écris ce programme:Problème avec mon makefile

  • Q2.cpp contient le principal.
  • Agent.cppAgent.h
  • Timing.cppTiming.h
  • RandomDouble.cppRandomDouble.cpp

Et j'utilise l'en-tête randoma.h dans RandomDouble.cpp. Je téléchargé le fichier randomaelf64.a et je l'ai écrit ce makefile:

Q2 : Q2.o Agent.o Timing.o RandomDouble.o 
    g++ -Wall -g randomaelf64.a RandomDouble.o Q2.o Agent.o Timing.o -o Q2 

Q2.o : Q2.cpp Agent.h Timing.h 
    g++ -Wall -g -c Q2.cpp -o Q2.o 

Agent.o : Agent.cpp Agent.h Timing.h RandomDouble.h PrintQ2.h 
    g++ -Wall -g -c Agent.cpp -o Agent.o 

RandomDouble.o : RandomDouble.cpp RandomDouble.h randoma.h 
    g++ -Wall -g -c RandomDouble.cpp -o RandomDouble.o 

Timing.o : Timing.cpp Timing.h Agent.h 
    g++ -Wall -g -c Timing.cpp -o Timing.o 

clear : 
    rm *.o Q2 

À l'exception de la première commande, chaque g ++ .. commande fonctionne quand je le fais séparément. Même quand j'ajouter un main()-RandomDouble.cpp et exécuter:

g++ -Wall -g randomael64.a RandomDouble.cpp -o rand 

il fonctionne. Donc je pense que peut-être le problème est avec mon makefile.

Quand je lance make je reçois cette erreur:

RandomDouble.o: In function `InitSeed()': 
/cs/stud/ofrenk33/CPP/ex1/RandomDouble.cpp:11: undefined reference to `MersenneRandomInit' 
RandomDouble.o: In function `InitSeed(int)': 
/cs/stud/ofrenk33/CPP/ex1/RandomDouble.cpp:16: undefined reference to `MersenneRandomInit' 
RandomDouble.o: In function `GetRandomDouble()': 
/cs/stud/ofrenk33/CPP/ex1/RandomDouble.cpp:21: undefined reference to `MersenneRandom' 
Agent.o: In function `Agent::SendMessage()': 
/cs/stud/ofrenk33/CPP/ex1/Agent.cpp:31: undefined reference to 
... 
make: *** [Q2] Error 1 

je dois dire qu'il ya des fonctions déclarées dans randoma.h qui sont dans la bibliothèque randomaelf64.a.

Comment résoudre ce problème?

+0

Alors qu'est-ce qui ne fonctionne pas exactement pour vous? Recevez-vous un message d'erreur? Si non, quels sont les symptômes de votre problème? –

Répondre

5

Vous devez lier par rapport à la bibliothèque après tous vos propres fichiers objets. L'éditeur de liens n'inclura que la bibliothèque dont il a besoin, et s'il n'y a pas encore de références non résolues, aucune bibliothèque ne sera nécessaire. Remplacez la première règle par:

Q2 : Q2.o Agent.o Timing.o RandomDouble.o 
    g++ -Wall -g RandomDouble.o Q2.o Agent.o Timing.o randomaelf64.a -o Q2