Проблема с моим make-файлом - PullRequest
       0

Проблема с моим make-файлом

1 голос
/ 02 сентября 2010

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

  • Q2.cpp содержит основной.
  • Agent.cpp Agent.h
  • Timing.cpp Timing.h
  • RandomDouble.cpp RandomDouble.cpp

И я использую заголовок randoma.h в RandomDouble.cpp. Я скачал файл randomaelf64.a и написал этот make-файл:

 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

За исключением первой команды, каждая команда g ++ .. работает, когда я делаю это отдельно. Даже когда я добавляю 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.

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

1 Ответ

5 голосов
/ 02 сентября 2010

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

Q2 : Q2.o Agent.o Timing.o RandomDouble.o 
    g++ -Wall -g RandomDouble.o Q2.o Agent.o Timing.o randomaelf64.a -o Q2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...