2010-09-02 3 views
1

Я думаю, что у меня есть проблема с моим make-файлом. Я пишу эту программу:Проблема с моим make-файлом

  • Q2.cpp содержит основные.
  • Agent.cppAgent.h
  • Timing.cppTiming.h
  • RandomDouble.cppRandomDouble.cpp

И я использую заголовок randoma.h в RandomDouble.cpp. Я скачал файл randomaelf64.a, и я написал эту 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 

для первой команды За исключением, каждая команда г ++ .. работает, когда я делаю это отдельно. Даже когда я добавить main() к RandomDouble.cpp и запустить:

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

это работает. Поэтому я думаю, что может быть проблема с моим make-файлом.

Когда я бегу make я получаю эту ошибку:

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 

Мне нужно сказать, что есть функции, объявленные в randoma.h, которые находятся в randomaelf64.a библиотеке.

Как исправить эту проблему?

+0

Так что же вы _not_ для вас? Вы получаете сообщение об ошибке? Если нет, каковы симптомы вашей проблемы? –

ответ

5

Вам необходимо связать библиотеку после со всеми вашими объектными файлами. Компилятор будет включать только такую ​​библиотеку, в которой она нуждается, и если еще нет нерешенных ссылок, то ни одна из библиотек не понадобится. Измените первое правило на:

Q2 : Q2.o Agent.o Timing.o RandomDouble.o 
    g++ -Wall -g RandomDouble.o Q2.o Agent.o Timing.o randomaelf64.a -o Q2 
Смежные вопросы